为什么 concat 函数返回一个带有窗口的数组

Why does the concat function return an array with window in it?

本文关键字:一个 窗口 数组 函数 concat 返回 为什么      更新时间:2023-09-26

我试图围绕这个javascript片段:

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

它返回窗口,但为什么?

将其分解为组件后,更容易理解发生了什么。

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

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

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