Google Chrome中似乎正在发生一些奇怪的事情:
> var f = [].reverse;
undefined
> f() == window;
true
在node.js上,我得到了不同的结果:
> var f = [].reverse;
undefined
> f() == global;
TypeError: Array.prototype.reverse called on null or undefined
为什么会发生这种情况?它与范围有关吗?
[].reverse
是在this
。
例如,当称为 [1,2].reverse()
时, this
是 [1,2]
数组,它返回 [2,1]
。
但是,如果您只调用f()
,则您在没有上下文的情况下调用该功能。在浏览器中,这意味着传递了window
的默认上下文(除非您处于严格模式),并且在服务器上,您会发现一个错误,基本上告诉您this
不确定。
尝试f.call([1,2])
功能Array.prototype.reverse
返回this
。当您将其称为f()
时,它会在 [].reverse()
之类的呼叫中丢失它将带有的this
信息。在严格模式之外,默认的this
是window
,所以这就是返回的原因。