arguments
是一个类数组对象,包含调用函数时传入的所有参数。这个对象只有以 function
关键字
定义函数(相对于使用箭头语法创建函数)时才会有。虽然主要用于包含函数参数,但 arguments
对象其实还有一个 callee
属性,是一个指向 arguments
对象所在函数的指针。
callee
属性的应用;来看下面这个经典的阶乘函数:
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * factorial(num - 1);
}
}
上面的阶乘函数,递归调用;但只要函数名factorial
名称一改变,就会出错;这无疑让方法形成了紧密耦合;可使用 arguments.callee
就可以让函数逻辑与函数名解耦:
function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num - 1); // arguments.callee代替factorial
}
}