search

Home  >  Q&A  >  body text

前端 - Javascript中,函数的arguments为什么要设计成Array-like?

我们都知道arguments是一个类数组的对象,那为什么要这么设计呢?

怪我咯怪我咯2896 days ago656

reply all(3)I'll reply

  • 天蓬老师

    天蓬老师2017-04-10 12:49:32

    我猜是因为不希望大家对arguments做slice、push等等操作。 毕竟,这东西应该是只读的。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 12:49:32

    《javascript语言精粹》中是这么解释的:这(arguments类数组只有length一个方法)是一个设计上的错误——这不是一个令人信服的解释,仅供参考。

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 12:49:32

    我觉得应该是arguments和array在有些方面的区别。比如说argument可以接到所有实参。又比如说argument可以用callee方法来解耦,

    function factorial(num) {  
        if(num<=1) return 1;   
        //此时和函数名耦合在一起  
        // else return num*factorial(num-1);  
        //以下就实现了函数名的解耦合,在js中通常都是使用这种方式做递归  
        else return num*arguments.callee(num-1);  
    
    }  
    alert(cf(5));  
    factorial = null;  
    alert(cf(5));  
    

    即便你把factorial变成空过后也不会影响代码执行。

    reply
    0
  • Cancelreply