美文网首页
arguments[0]()坑

arguments[0]()坑

作者: 唐卡豆子 | 来源:发表于2018-11-05 22:14 被阅读0次

今天遇到一道笔试题

      var length = 10;
        function fn(){
            console.log(this.length);
        }
        var obj = {
            length:5,
            methods:function(fn){
                fn();
                arguments[0]();
            }
        };
        obj.methods(fn, 1);  // 10 2
/*
第一个 fn  this指向window   输出10
第二个 arguments[0]() 可以理解为arguments.0() [只是方便理解] ,
            即argument对象调用fn函数,所以this指向arguments对象
arguments = {
  0:fn,    //function fn(){console.log(this.length);}
  1:第二个参数 1,
  length:2
}
*/

延伸:

        var len = 10;
        var obj1 = {
            len:6,
            method:function(){
                console.log(this.len);
            }
        };
        var obj2 = {
            len:5,
            method:function(fn){
                fn();
                arguments[0](); 
            }
        };

        obj2.method(obj1.method,obj2.method);  // 10 undefined
/*
第一个 fn  this指向window   输出10
第二个 arguments[0]()    this指向arguments
 arguments = {
  0:obj1.method,   //function(){console.log(this.len);}
  1:obj2.method,
  length:2
}
arguments没有len属性,所以为undefined
*/

相关文章

网友评论

      本文标题:arguments[0]()坑

      本文链接:https://www.haomeiwen.com/subject/lnvexqtx.html