函数中的arguments 对象
js函数中具有类似数组一样的对象,这些对象称为 arguments对象,和传递给函数的参数相对应。
传递给js函数的所有参数都可以使用arguments对象来引用。
arguments对象是可用于函数的局部变量。
function f (){
return arguments;
}
f(1,2,3) // [1,2,3]
arguments对象和数组相似是因为它也包含索引元素和length属性。
arguments对象 值得关注的属性 【callee】属性。该属性引用的是当前被调用的函数对象,也就是说,如果我们所建函数的返回值是 arguments.callee,那么该函数在被调用时就会返回自身的引用。
function f(){
return arguments.callee;
}
f() // f()
// 实际案例:通过arguments.callee属性来实现匿名函数的递归调用
(
function(count){
if(count < 5) {
console.log(count); // 会依次打印1,2,3,4
arguments.callee(++count);
}
}
)(1)
// 可以设置arguments对象
function add(num1, num2) {
arguments[0] = 15;
var res = num1 + num2;
return res;
}
var r = add(7, 8);
console.log(r); // 23 在add函数中,num1和arguments[0]引用相同的值。所以,当你更新arguments[0]时,num1的值也会被更新
// 将arguments对象转换为数组
function add(num1, num2) {
var arg = Array.prototype.slice.call(arguments);
var arg = Array.from(arguments); // ES6 方法
console.log(arg);
}
总结
- arguments对象的长度等于传递给函数的参数的数量
- arguments对象是类似数组的对象,但不是js数组。
- JavaScript arguments对象索引从零开始。所以第一个参数将被arguments[0]引用,第二个参数将被arguments[1]引用,等等。
- 通过arguments.callee属性来实现匿名函数的递归调用