arguments[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
*/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,385评论 2 17
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,892评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,501评论 2 59
  • 简单工厂模式 简单工厂模式,不属于设计模式,它违反了高类聚,低耦合。 优点: 使用方便,只需要指定需要哪种产品,至...
    Doter阅读 1,072评论 0 0
  • 二十一岁的我经历了别人没有经历过的事,很累很累。 她,之前我一直放不下,也一直释怀不了,但前两天我看了一篇...
    H玖玖阅读 1,092评论 0 0