我正试图围绕这个 javascript 代码段进行思考:
(_=[].concat)()[0]
它返回窗口,但为什么呢?
在将其分解为各个组件之后,就更容易理解发生了什么。
您基本上可以将此代码段重写为:
Array.prototype.concat.call(this)[0]
当您调用一个函数时,它会this
从 之前的对象中获取其上下文.
,因此函数调用object.toString()
将其this
引用设置为object
。但是,当一个函数没有包含对象时,它的上下文将默认为全局范围,这意味着window
在浏览器中。concat
通常会使用调用它的现有数组上下文作为要连接到的基本数组,但在这种情况下window
是上下文,因此它被转换为一个数组,然后将 concat 应用于它,但由于没有提供任何内容要连接起来,它只返回一个带有上下文的数组,即window。