每个函数都有个参数叫agruments,这个参数主要用于函数传参时会把参数复制到这个agruments里面,接受函数
function a(){
console.log(arguments)
}
a(1,2,3)
得到一个Arguments对象
里面包含了之前传入a函数的三个传参。所以说agurments主要用于存传入函数的变量。
那其实为什么不直接用而是要转弯拐角去这样做呢?
我觉得首先,也是最重要的一点:降低代码的耦合度
当代码越来越多的时候,可能改了什么地方就报错了,需要逐个逐个改,如果用Arguments就不存在这个问题
还要说下Argument还有一个比较常用的属性:callee.
Argument.callee主要是指向当前运行的函数,他是一个指针来的
function b(n){
if(n<=0){
return 1
}else{
return n+arguments.callee(n-1)
}
}
这在函数中使用arguments.callee(n-1)相当于b(n-1)。
那为什么要这样用?
function fun(num){
if(num <= 1){
return 1;
}
else{
return num*fun(num-1);
}
}
var ffun = fun;
fun= function(num){
return 0;
};
console.log(ffun(3))
输出的结果却是0,为什么,因为在函数中引用了fun,当我们修改fun时则ffun中利用了fun方法,而fun返回0,所以我们一直返回0;解决的办法是把fun(num-1)变成arguments.callee(num-1),结果能够正常显示。