为什么要写`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
工作。