为什么x()==窗口如果var x = [] .reverse



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信息。在严格模式之外,默认的thiswindow,所以这就是返回的原因。

相关内容

最新更新