我明白为什么第一个输出是10,但我无法理解为什么第二个输出是2。
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);
arguments
一般来说是每个函数里面都有一个对象,它包含了传递给每个特定函数的参数值。在你的例子中。
obj.method(fn, 1);
// ^ ^ arguments object will have those 2 values
所以当你 arguments[0]()
居然叫 fn
再次 不过 在这种情况下,你会触发 fn
从一个对象(该 arguments
对象) 这才是关键.
正因为如此。this
关键字 fn
是指 arguments
对象,在这种情况下,它的长度值为2,就像你传递给你的 obj.method(fn, 1)
和第二次记录的值。
章 1 & 2 的 这个 这本书对如何在中国市场上销售产品有更多的阐述。this
的行为,可能会帮助你更了解你的情况。
另外,值得注意的是,一个对象没有任何的 .length
财产,但虽然 arguments
对象是 array-like
物件(查看链接 arguments
对象)。) 它.