1.前言
arguments, caller , callee 是什么?
在javascript 中有什么样的作用?本篇会对于此做一些基本介绍。
2. arguments
arguments: 在函数调用时, 会自动在该函数内部生成一个名为 arguments的隐藏对象。 该对象类似于数组, 但又不是数组。可以使用[]操作符获取函数调用时传递的实参。
[html]
<script> </p> <p>function testArg() </p> <p>{ </p> <p> alert("real parameter count: "+arguments.length); </p> <p> for(var i = 0; i < arguments.length; i++) </p><p> { </p><p> alert(arguments[i]); </p><p> } </p><p>} </p><p> </p><p> </p><p>testArg(11); //count: 1 </p><p>testArg('hello','world'); // count: 2 </p><p></script>
看上去很简单。 需要注意的是 argument 保存的实参的信息。
上面有说, arguments 不是一个数组,何以见得? 执行以下部分就可以知道了
[javascript]
(function () {
alert(arguments instanceof Array); // false
alert(typeof(arguments)); // object
})();
对于以上立即执行函数写法不清楚的话, 可以参考
http://blog.csdn.net/oscar999/article/details/8507919
只有函数被调用时,arguments对象才会创建,未调用时其值为null:
[javascript]
alert(new Function().arguments);//return null
arguments 的完整语法如下:
[function.]arguments[n]
参数function :选项。当前正在执行的 Function 对象的名字。 n :选项。要传递给 Function 对象的从0开始的参数值索引。
3. caller
在一个函数调用另一个函数时,被调用函数会自动生成一个caller属性,指向调用它的函数对象。如果该函数当前未被调用,或并非被其他函数调用,则caller为null。
[javascript]
<script> </p> <p>function testCaller() { </p> <p> var caller = testCaller.caller; </p> <p> alert(caller); </p> <p>} </p> <p> </p> <p>function aCaller() { </p> <p> testCaller(); </p> <p>} </p> <p> </p> <p>aCaller(); </p> <p> </p> <p>4. callee</p> <p>当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。</p> <p>由于arguments在函数被调用时才有效,因此arguments.callee在函数未调用时是不存在的(即null.callee),且解引用它会产生异常。</p> <p>[javascript] </p> <p><script> </p> <p>function aCallee(arg) { </p> <p> alert(arguments.callee); </p> <p>} </p> <p> </p> <p>function aCaller(arg1, arg2) {aCallee();} </p> <p> </p> <p>aCaller(); </p> <p></script>