码迷,mamicode.com
首页 > 其他好文 > 详细

arguments

时间:2018-05-09 12:14:27      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:factorial   owa   call   sum   another   UNC   简单   console   调用函数   

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

标签:factorial   owa   call   sum   another   UNC   简单   console   调用函数   

原文地址:https://www.cnblogs.com/MJ-MY/p/9013038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!