js程序员必需熟悉的arguments对象属性

2016-12-07 1359 1 编辑:网站前端设计伍林 来源:前端网站设计

arguments 是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的。

所有主要的js函数库都利用了arguments对象。

所有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数。

他不是一个数组,而是一个类数组对象,  

如果用typeof arguments,返回的是'object'。

虽然我们可以用调用数据的方法来调用arguments。比如length,还有index方法。但是数 组的push和pop对象是不适用的。

看起来貌似argument对象使用起来十分有限,但是实际上它是一个非常有用的对象。

你可以通过使用argument对象让函数能够调用数量不定 的参数。  

也就是说arguments对象的长度是由实参个数而不是形参个数决定的。

形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。

对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。

如下代码可以得以验证。

function f(a, b, c){

    alert(arguments.length);   // result: "2"

    a = 100;

    alert(arguments[0]);       // result: "100"

    arguments[0] = "qqyumidi";

    alert(a);                  // result: "qqyumidi"

    alert(c);                  // result: "undefined"

    c = 2012;

    alert(arguments[2]);       // result: "undefined"

}

f(1, 2);    


arguments.callee

arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。

我们知道, 递归函数必须能够引用它本身。很典型的,函数通过自己的名字调用自己。

然而,匿名函数 (通过 函数表达式 或者 函数构造器 创建) 没有名称。

因此如果没有可访问的变量指向该函数,唯一能引用它的方式就是通过 arguments.callee。

function create() {

   return function(n) {

      if (n <= 1)

         return 1;

      return n * arguments.callee(n - 1);

   };

}

var result = create()(5); // returns 120 (5 * 4 * 3 * 2 * 1)

对于有名字的函数, 在使用函数递归调用时也推荐使用arguments.callee代替函数名本身。

注意:arguments.callee被从 ES5 严格模式中移除掉了!

网页设计

本站文章均为深正网站建设摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,但谢绝直接搬砖和抄袭!感谢...
关注深正互联
我们猜你喜欢