记录今天所学到的argument的基本用法

每个函数都有个参数叫agruments,这个参数主要用于函数传参时会把参数复制到这个agruments里面,接受函数

function a(){
console.log(arguments)

}
a(1,2,3)

得到一个Arguments对象

记录今天所学到的argument的基本用法_第1张图片

里面包含了之前传入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),结果能够正常显示。

你可能感兴趣的:(前端小知识)