1.arguments当然只在function体内才有意义, arguments.length 返回的是传入function的实参个数。
<script type="text/javascript">
window.onload = function() {
(function(arg1, arg2) {
alert(arguments.length); //0
alert(arguments.callee.length);//2
})();
}
</script>
arguments只在function体内才有意义, arguments.length 返回的是传入function的实参个数,比如我这里没有传入什么,而是直接运行了一个匿名函数,那么第一个alert肯定是‘0‘, 再来看arguments.callee返回的是调用的函数本身, 对于匿名函数,则可以通过arguments.callee得到自身的引用,这里arguments.callee.length返回的是function本预期要传入的参数个数,这样的话第二个alert就是‘2‘, 如果这是个有名字的函数比如函数名为mytest,那么就可以直接mytest.length来得到应该传入的参数个数.
2.形参的值跟一一对应的arguments参数数组中的值始终保持同步的。
function doAdd(num1, num2){
num1 = 10;
alert(arguments[0]);
}
doAdd(5, 5); //得到10
相反
function doAdd(num1, num2){
arguments[0] = 10;
alert(num1 + num2);
}
doAdd(5, 5);//得到15
注意:在严格模式下,上面的做法是错误的,不能在函数内部重写arguments的值,会报错。
所有的参数传递都是通过传值,而不是引用。
3.在函数内部可以使用arguments参数数组的形式调用。这就说明命名的参数即形参不是必须的,只是为了提供便利。
function say(){
alert(arguments[0] + ‘say‘ + arguments[1]);
}
say(‘xiao‘, ‘hello‘);