美文网首页
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