为什么 arguments[0]() 这个输出的是 undefined ?
高洛峰
高洛峰 2016-11-08 13:26:55
0
1
572

哪位大神帮我看看,为什么arguments[0]() 这个输出的是 undefined ?fn()这个会输出10,为什么 arguments[0]() 就是 undefined 呢?

    var len = 10;
    var obj1 = {
        len:6,
        method:function(){
            console.log(this.len);
        }
    };
    var obj2 = {
        len:5,
        method:function(fn){
            fn();// 这里输出10
            arguments[0](); // 这里为什么输出undefined
        }
    };

    obj2.method(obj1.method,obj2.method);


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
三叔

arguments[0](); 的 this 绑定的是 arguments。

window['1'] = 'a';
var obj = {
   '1' : 'b',
    fun : function(){
        return this[1];
    }
}

function test1(fun, arg){
    console.log(fun());    //a,this == undefined, this = window
    console.log(arguments[0]());    //c,this = arguments
}

test1(obj.fun, 'c');

为了避免歧义,再更新一下:

为什么 arguments[0] 和 fun 指向的函数都一样,结果却不同呢?这个和 arguments 和 fun 没有关系,因为 arguments 是一个数组,数组也是一个 Object。

({ len:6, method: function(){console.log(this.len);}}).method(); //6

同为 Object 的 Array,this 同样也是指向自身的。

[function(){console.log(this[1]);}, 6][0](); //6


热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板