0

我正试图围绕这个 javascript 代码段进行思考:

(_=[].concat)()[0]

它返回窗口,但为什么呢?

4

1 回答 1

1

在将其分解为各个组件之后,就更容易理解发生了什么。

您基本上可以将此代码段重写为:

Array.prototype.concat.call(this)[0]

当您调用一个函数时,它会this从 之前的对象中获取其上下文.,因此函数调用object.toString()将其this引用设置为object。但是,当一个函数没有包含对象时,它的上下文将默认为全局范围,这意味着window在浏览器中。concat通常会使用调用它的现有数组上下文作为要连接到的基本数组,但在这种情况下window是上下文,因此它被转换为一个数组,然后将 concat 应用于它,但由于没有提供任何内容要连接起来,它只返回一个带有上下文的数组,即window。

于 2013-10-15T09:31:39.007 回答