概述
示例一
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<head>
<title> 关于arguments,callee,caller等的测试 </title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
</head>
<body>
<script type="text/javascript">
function testArg()
{
var sTemp ="test()开始执行/n/n函数定义的正文:/n/n";
sTemp+=arguments.callee + "/n/n";
sTemp+="传入参数的长度:/n";
sTemp+=arguments.length+"/n/n";
sTemp+="传入参数的内容:/n";
for (var i=0;i<arguments.length;i++){
sTemp+=arguments[i]+"/n";
}
sTemp+="/n点击确定,开始调用a();";
alert(sTemp);
a(arguments);
}
function a(args)
{
var sTemp ="a()开始执行/n/n函数定义的正文:/n/n";
sTemp+=arguments.callee + "/n/n";
sTemp+="传入参数的长度:/n";
sTemp+=arguments.length+"/n/n";
sTemp+="传入参数的内容:/n";
for (var i=0;i<arguments.length;i++){
sTemp+=arguments[i]+"/n";
}
sTemp+="/n当前函数的调用者:/n";
sTemp+=arguments.callee.caller+"/n/n";
sTemp+="/n点击确定,开始调用b();";
alert(sTemp);
b(args);
}
function b(args)
{
var sTemp ="b()开始执行/n/n函数定义的正文:/n/n";
sTemp+=arguments.callee + "/n/n";
sTemp+="传入参数的长度:/n";
sTemp+=arguments.length+"/n/n";
sTemp+="传入参数的内容:/n";
for (var i=0;i<arguments.length;i++){
sTemp+=arguments[i]+"/n";
}
sTemp+="/n当前函数的调用者:/n";
sTemp+=arguments.callee.caller+"/n/n";
sTemp+="/n点击确定,开始调用c();";
alert(sTemp);
c(args);
}
function c(args)
{
var sTemp ="c()开始执行/n/n函数定义的正文:/n/n";
sTemp+=arguments.callee + "/n/n";
sTemp+="传入参数的长度:/n";
sTemp+=arguments.length+"/n/n";
sTemp+="传入参数的内容:/n";
for (var i=0;i<arguments.length;i++){
sTemp+=arguments[i]+"/n";
}
sTemp+="/n当前函数的调用者:/n";
sTemp+=arguments.callee.caller+"/n/n";
alert(sTemp);
alert("args.callee:/n"+args.callee);
alert("args.callee.caller:/n"+args.callee.caller);
alert("testArg.arguments.callee.caller:/n"+testArg.arguments.callee.caller);
}
;
</script>
<input type="button" onclick="testArg('iecn.net','深蓝蝴蝶','枫岩');" value="testArg('iecn.net','深蓝蝴蝶','枫岩');" />
</body>
</html>
示例二
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JavaScript中的arguments,callee,caller,call,appy</title>
<script type="text/javascript">
//----------------arguments基本使用------------------------//
function argTest(a,b,c,d){
var numargs = arguments.length; // 实参个数
var expargs = argTest.length; // 形参个数。
alert("实参数目为:"+numargs);
alert("形数数目为:"+expargs);
alert("arguments[0]="+arguments[0]); //这个在IE和火狐下都支持
alert("argTest[0]="+argTest[0]); //IE8.0-undefined,Mozilla/5.0 支持。
alert(typeof(arguments)); //arguments是对象
}
argTest(1,2)
//一句话,arguments.length就是实参个数,函数名.length就是形参个数//
//----------------caller基本使用------------------------//
function callerDemo() {
if (callerDemo.caller) {
alert(typeof(callerDemo.caller)); //返回定义式类型(function)
alert(callerDemo.caller); //返回上级函数的引用
var a= callerDemo.caller.arguments[0];
alert(a);
} else {
alert("this is a top function");
alert(callerDemo.caller);
alert(typeof(callerDemo.caller)); //typeof(null)返回object
}
}
function handleCaller() {
callerDemo();
}
callerDemo();
handleCaller("参数1","参数2");
function calleeDemo() {
alert(arguments.callee); //正被执行的 function 对象引用
}
//----------------这到底怎么了???-----------------------//
function Sing()
{
with(arguments.callee)
alert(arguments.callee);
alert(author + ":" + poem);
};
Sing.author = "李白";
Sing.poem = "汉家秦地月,流影照明妃。一上玉关道,天涯去不归";
Sing();
Sing.author = "李战";
Sing.poem = "日出汉家天,月落阴山前。女儿琵琶怨,已唱三千年";
Sing();
//这个只输出一个弹出框,应该共有六个呀?
//原因如下:alert(arguments.callee)执行后当前引用(arguments.callee)变成了alert函数引用,这个引用中没有author和poem属性。
//----------------还是谨慎调用arguments.callee-----------------------//
//----------------caller与匿名定义式基本使用------------------------//
//匿名定义式调用;
(function(arg0,arg1){
alert(arguments.callee);
alert("参数个数为:"+arguments.callee.length);//这里到底是形参个数还是实参个数?看如下分析。
})();
function anonymousFnCall()
{
alert("Hello world");
this.a="第一个属性";
//一个匿名定义式
this.show=function (arg0,arg1)
{
alert(this.a);
alert("参数个数为:"+arguments.callee.length)
};
this.sayHello=function()
{
return function() {alert("hello"); } ;
};
}
var ano=new anonymousFnCall();
ano.show('1'); //已经表明arguments.callee.length是形参个数了,因为arguments.callee相当于 函数名.length
ano.sayHello()();//对定义式的调用不要忘记();
//一句话,函数名.callee是对上一级函数的引用,arguments.callee是对正在运行的函数引用//
//-----------------apply与call---------------------//
function ObjectA(){
this.getMsg=function(msg){alert(msg)}
}
function ObjectB(){
//ObjectA.call(this);
ObjectA.apply(this,arguments);
getMsg('Object参数');
}
ObjectB('参数0');
//-----------------apply与call调用差别---------------------//
function act(){
for(var i=0;i<arguments.length;i++){
document.write(this.t[i]+": "+arguments[i]+"<br/>");
}
}
function actby(){
this.t = ["参数1是:","参数2是:"];
}
//call(obj,arg1,arg2...);
act.call(new actby(),"参数1调用来自call","参数2调用来自call");
//apply(obj,[arg1,arg2...]);
act.apply(new actby(),["参数1调用来自apply","参数2调用来自apply"]);
//--apply与call都是将属性或是定义式绑定到另外一个对象上去运行--//
</script>
</head>
<body>
</body>
</html>
最后
以上就是粗暴月光为你收集整理的理解javascript中arguments,callee,caller示例一示例二的全部内容,希望文章能够帮你解决理解javascript中arguments,callee,caller示例一示例二所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复