javascript - 帮忙解析下一段js代码,,

查看:73
本文介绍了javascript - 帮忙解析下一段js代码,,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var length = 10;
function fn() {
    console.log(this.length);
}
var obj = {
    length: 5,
    method: function() {
        fn();
        arguments[0]();
    }
};

obj.method(fn, 1);

结果:10 2 为神马??

解决方案

稍稍修改一下你的代码

var length = 10;
function fn() {
    console.log(this.toString());
    console.log(this.length);
}
var obj = {
    length: 5,
    method: function() {
        fn();
        arguments[0]();
    }
};

obj.method(fn, 1);

arguments[0]() 中的 thisarguments

看起来 arguments 是一个数组,所以 arguments[0]() 的执行似乎应该按函数数组的方式来运行,但实际不是,因为 arguments 是一个伪数组不是真正的数组,所以 argumnts[0] 其实是 arguments["0"]"0" 是属性名称。

现在假设属性名称是 "a"arguments["a"] = fn,那么

arguments["a"]()arguments.a() 是等同的,这时候 fn 中的 this 就是 arguments,这样很好理解吧?类似的,如果属性名是 "0",虽然不能用 arguments.0() 这种方式调用,但用 arguments["0"]() 这种方式调用也是一样的,和 arguments["a"] 类似,所以第二个输出是 2,即 arguments.length

这篇关于javascript - 帮忙解析下一段js代码,,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆