javascript下arguments,caller,callee,call,apply示例及理解

时间: 作者:被格

  

[javascript,arguments,caller,callee,call]javascript下arguments,caller,callee,call,apply示例及理解

  在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments  
Arguments  
该对象代表正在执行的函数和调用它的函数的参数。

  
  
[function.]arguments[n]  
参数function :选项。当前正在执行的 Function 对象的名字。 n :选项。要传递给 Function 对象的从0开始的参数值索引。

  
说明  
  
Arguments是进行函数调用时,除了指定的参数外,还另外创建的一个隐藏对象。Arguments是一个类似数组但不是数组的对象,说它类似数组是因为其具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。还有就是arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表,而且不能显式创建 arguments 对象。arguments 对象只有函数开始时才可用。下边例子详细说明了这些性质:  
代码如下:

  
//arguments 对象的用法。

  
function ArgTest(a, b){  
var i, s = "The ArgTest function expected ";  
var numargs = arguments.length; // 获取被传递参数的数值。

  
var 汇盛国际开户 expargs = ArgTest.length; // 获取期望参数的数值。

  
if (expargs < 2)  
s += expargs + " argument. ";  
else  
s += expargs + " arguments. ";  
if (numargs < 2)  
s += numargs + " was passed.";  
else  
s += numargs + " were passed.";  
s += "\n\n"  
for (i =0 ; i < numargs; i++){ // 获取参数内容。

  
s += " Arg " + i + " = " + arguments[i] + "\n";  
}  
return(s); // 返回参数列表。

  
}  

  
在此添加了一个说明arguments不是数组(Array类)的代码:  
  
代码如下:
  
Array.prototype.selfvalue = 1;  
alert(new Array().selfvalue);  
function testAguments(){  
alert(arguments.selfvalue);  
}  
  
运行代码你会发现第一个alert显示1,这表示数组对象拥有selfvalue属性,值为1,而当你调用函数testAguments时,你会发现显示的是“undefined”,说明了不是arguments的属性,即arguments并不是一个数组对象。

  
在此附加上大家推荐的一个简单方法:  
代码如下:

  
alert(arguments instanceof Array);  
alert(arguments instanceof Object);  
  
  
caller  
返回一个对函数的引用,该函数调用了当前函数。

  
functionName.caller  
functionName 对象是所执行函数的名称。

  
说明  
对于函数来说,caller 属性只有在函数执行时才有定义。如果函数是由顶层调用的,那么 caller 包含的就是 null 。如果在字符串上下文中使用 caller 属性,那么结果和 functionName.toString 一样,也就是说,显示的是函数的反编译文本。

  
下面的例子说明了 caller 属性的用法:  
代码如下:

  
// caller demo {  
function callerDemo() {  
if (callerDemo.caller) {  
var a= callerDemo.caller.toString();  
alert(a);  
} else {  
alert("this is a top function");  
}  
}  
function handleCaller() {  
callerDemo();  
}  
  
callee  
  
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。

  
  
[function.]arguments.callee  
可选项 function 参数是当前正在执行的 Function 对象的名称。

  
  
说明  
  
callee 属性的初始值就是正被执行的 Function 对象。

  
  
callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名  
函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性  
仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候  
用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是  
形参长度,由此可以判断调用时形参长度是否和实参长度一致。

  
  
示例  
  
代码如下:

  
//callee可以打印其本身  
function calleeDemo() {  
alert(arguments.callee);  
}  
//用于验证参数  
function calleeLengthDemo(arg1, arg2) {   (责任编辑:admin)

推荐图片Related

相关文章Related

查看更多热门新闻


首页 | 特效插件 | 常用代码 | 样式素材 | 脚本代码 | css特效

Copyright © 2017-2018 汇盛国际 版权所有

系统要求:本站自适应各终端浏览器分辨率

请使用Google、Firefox、IE9、百度浏览器登录网站

网站地图 | RSS订阅 | 汇盛国际平台