为什么要写`window [“eval”] .call(window,data);`

时间:2011-10-27 20:39:00

标签: jquery

jQuery 1.7rc1的第614行:

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

为什么不简单地写

eval.call( window, data );

2 个答案:

答案 0 :(得分:7)

答案在这里:Decoding jQuery

  

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

     

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

     

Chrome:eval.call(窗口,数据)在Chrome上中断,但是窗口[“eval”   ] .call(窗口,数据)适用于Chrome,以及其他非IE   浏览器,以上是基于。

的变通方法

答案 1 :(得分:3)

在查看source后,我找到了this link。看一下强调的文字:

  

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

因此,window.eval用于让globalEval在Chrome中运行。