产出来源不明确

问题描述 投票:1回答:1

我明白为什么第一个输出是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);
    
javascript ecmascript-6 this javascript-objects
1个回答
3
投票

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 对象)。) .

© www.soinside.com 2019 - 2024. All rights reserved.