为什么要写`window .call(window,data);`

jQuery 1.7rc1的第614行:

window[ "eval" ].call( window, data );

为什么不简单写

eval.call( window, data );

答案在这里: 解码jQuery ,

Jim Driscoll发现,对于更多符合标准的浏览器,你可以使用eval.call(窗口,数据),但对于Chrome和IE,情况有点不同。

Internet Explorer:IE似乎使用window.execScript(数据)

Chrome:eval.call(窗口,数据)在Chrome上中断,但是窗口[“eval”] .call(窗口,数据)可以在Chrome以及其他非IE浏览器上运行,这就是上述解决方法的基础。

看完源后 ,我找到了这个链接 。 看看强调的文字:

可悲的是, eval.call(window,src)在Chrome上中断 – 它抱怨上下文不匹配。 奇怪 – 我无法谷歌为什么会这样。 但后来有几个幸运的猜测,我发现window.eval.call(window,src)适用于所有非IE浏览器。 现在,当我说“var j = 1”时,窗口[j]是设置的变量……所以,这很好。 为什么我们要添加额外的窗口。 在Chrome上? 不确定 – 我猜可以,但它太可能错了。

因此, window.eval用于在Chrome globalEval工作。