arguments

Posted mj-my

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arguments相关的知识,希望对你有一定的参考价值。

arguments它是一个类数组对象。它是js的一个内置对象,当调用函数时,就会实例化出这个对象。

特点:

1.arguments的__proto__指向的是object。说明它是一个对象。

2.arguments可以把传入的实参个数以数组的形式保存起来。

3.arguments的属性,1.length,2.callee(callee是一个指向正在执行的函数的指针)它在严格模式下会失效。

4.arguments可以实现重载机制。

5.arguments可以通过callee属性实现递归。

案例:

1.简单的实例。印证上面1.2点。

function showargs() {
    console.log( arguments );//[1,2,3,4,5],__proto__:object.
}

showargs(1,2,3,4,5);

2.callee属性。

function showcallee() {
    var a = 1;
    var b = 2;
    var c = a + b;

    console.log(arguments.callee);//完整打印这段代码,

    return c;
}
showcallee();

3.实现重载

function foo() {
    var len = arguments.length,
        sum = 0;
    for(;len--;){
        sum += arguments[len];
    }
    return sum;
}

console.log( foo(1,2,3) );   //6
console.log( foo(1,3) );     //4
console.log( foo(1,2,3,5,6,2,7) );   //26

4.callee实现递归

普通的递归

function fa(num) { 
                if(num<=1) { 
                    return 1; 
                }else { 
                    return num * fa(num-1); 
                } 
                
            } 
console.log(fa(5));//120

callee的递归

function factorial(n){  
       if(n<=1){  
           return 1;  
       }else{  
           return n*arguments.callee(n-1);  
       }  
     }  

console.log(factorial(5));//120

但是callee在严格模式下会失效。

更好的解决方法是:使用命名函数来达到相同的效果

var factorial=(function f(n){  
        if(n<=1){  
            return 1;  
        }else{  
            return n*f(n-1);  
        }  
      });   
       var anotherF=factorial;  
       factorial=null;  
       alert(anotherF(2));  

 

以上是关于arguments的主要内容,如果未能解决你的问题,请参考以下文章

RuntimeError: ‘lengths’ argument should be a 1D CPU int64 tensor, but got 1D cuda:0 Long tensor(代码片段

js常用代码片段

argparse 代码片段只打印部分日志

可以直接拿来用的15个jQuery代码片段

几个可以直接拿来用的jQuery代码片段

几个可以直接拿来用的jQuery代码片段