【JS】 五分钟理解arguments

1.每个函数里面都隐式存在这arguments,也就是我们常用的实参列表,这也是我们能在函数体中调用其的原因。同时只有函数被调用时,arguments对象才会创建,未调用时其值为null。

function sum(){
    // arguments [1,2,3]
    var result =0;
    for(var i = 0;i < arguments.length;i++{
         result += arguments[i];
     }
     console.log(result);
 }
sum(1,2,3);

2.当我们在控制台中输出arguments时我们会发现arguments并不是一个数组,而是一个类数组对象。

3.当你在函数体中对形参进行赋值你会发现arguments也会发生改变,说明二者存在映射关系。

function sum(a,b,c){
    //arguments [1,2,3]
    //var a = 1;
    //var b = 2;
    //var c = 3;
    a=2;
    var result =0;
    console.log(arguments[0])
    for(var i=0; i<arguments.length;i++){
          result+=arguments[i];
    }
    console.log(result);
}
sum(1,2,3)
/*
   2
   7
*/    

4.arguments.callee的作用 讲这个之前我想先讲一下caller,同时讲下arguments.caller

   函数的caller,在一个函数调用另一个函数时,被调用函数隐式的产生一个caller属性,存放着调用它的函数对象。

function oCall() {  
   console.log(oCall.caller);  
}  
  
function oCaller() {  
   oCall();  
}          
oCaller();

  arguments.caller感觉上没什么用,但在严格模式下不可使用且会报错。

  arguments.callee同样在严格模式下不可使用,指向拥有该arguments的函数对象,也就是下面例子中的oCall,在特定情况下我们不想使用oCall的函数名时可以用arguments.callee属性来代替。例:在setTimeOut 中调用

function oCall(a) {  
    console.log(arguments.callee);
}  
  
function oCallee(a) {  
    oCall();  
}  

5.arguments和parameters的区别和用法,以及在es6中的使用差别可以去下面的链接查看,以后有空我也会补上

https://www.smashingmagazine.com/2016/07/how-to-use-arguments-and-parameters-in-ecmascript-6/


猜你喜欢

转载自blog.csdn.net/timcope/article/details/80047298