arguments[0]()坑

2018-11-05  本文已影响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
*/
上一篇下一篇

猜你喜欢

热点阅读