为什么 JavaScript 产生 "this" 输出?

Why is JavaScript producing "this" output?

我已经使用 JavaScript 一段时间了,但是这段代码让我有些困惑。

为什么这是下面这段代码的输出

length = 10;
function func() {
  console.log(this.length);
}

var obj = {
  length: 5,
  thisFunc: function(func) {
    func();
    arguments[0]();
  }
};

obj.thisFunc(func, 3);

生产

10
2

而不是

10
5

或至少

10
10

有人可以向我解释值 2 的来源以及我在这个(没有双关语意的)特定实例中涉及 this 时错过了什么吗?

在第一种情况下,它与在全局范围内的任何地方执行 console.log(this.length) 相同。因此,如您所知,它将是 10。

如评论中所述,arguments 对象是一个类似数组的对象,其长度为 属性。

You can use arguments.length to count how many arguments the function was called with`

在上面的引用中,调用的部分很重要。

在第二种情况下,函数在 arguments 对象的上下文中是 运行。您知道函数内部 this 的值取决于它的调用方式。这里thisarguments对象,长度为2.

length = 10;
function func() {
  console.log(this.length);
}

var obj = {
  length: 5,
  thisFunc: function(func) {
    
    func();
    arguments[0]();
    console.log(arguments.length);
  }
};

obj.thisFunc(func, 3);
console.log(this.length);