1

我尝试使用一些 ES5 的数组额外方法,例如map,、someforEach

[1, 2, 3].forEach(function (el) {
    console.log(this) // window
})

但我发现这些方法中的上下文不是调用它们的数组

但是之 Global context类的window

在 MDN看来

当一个函数作为对象的方法被调用时,它的 this 被设置为调用该方法的对象。

那么数组和被调用方法之间究竟是什么关系呢?

4

2 回答 2

1

this设置为在方法内部forEach调用 forEach 的数组。但是,您传递给 forEach 方法的匿名函数没有将其this设置为数组,因为该函数没有作为数组上的方法调用。(但是您可以将数组forEach作为thisArg提供给方法,因此this在匿名函数中将指向该数组。

例子:

var a = [1, 2, 3];
a.forEach(function (el) {
    console.log(this) // the Array
}, a);

或绑定函数:

var a = [1, 2, 3];
a.forEach((function (el) {
    console.log(this) // the Array
}).bind(a));
于 2013-08-28T07:43:27.177 回答
1

如果您查看developer.mozilla.org,您会看到的签名forEach是:

array.forEach(callback[, thisArg])

接着

如果为 forEach 提供了 thisArg 参数,则它将用作每次回调调用的 this 值,就像调用了 callback.call(thisArg, element, index, array) 一样。如果 thisArg 为 undefined 或 null,则函数中的 this 值取决于函数是否处于严格模式(如果处于严格模式则传递值,如果处于非严格模式则为全局对象)。

所以你永远不会收到arrayasthis除非你把它作为第二个参数forEach

于 2013-08-28T07:40:09.140 回答