jQuery .globalEval()函数

我偶然发现函数.globalEval()来浏览jQuery源代码。 有一些我不明白的简短文档 。 显然,它“对于动态加载外部脚本很重要”。 为什么? 来源也有点模糊:

 globalEval: function( data ) { if ( data && rnotwhite.test( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); } )( data ); } }, 

人们真的在现实生活中使用它吗? 如果是这样,为了什么?

顾名思义,它用于在全局上下文中执行eval代码。 例如,考虑以下( jsFiddle ):

 function example(){ $.globalEval("var example1 = 'first';"); eval("var example2 = 'second';"); console.log("In function: " + example1); //Prints 'first' console.log("In function: " + example2); //Prints 'second' } example(); console.log("Global: " + example1); //Prints 'first' console.log("Global: " + example2); //ReferenceError 

因为example1是使用globalEval定义的,所以它在全局范围内。 使用普通的旧正常eval ,该变量仅在调用eval的范围内可用。

如果要加载另一个JS脚本,并且想要在全局上下文中执行该脚本(例如,上面,我们可能需要在example函数之外使用example1 ,因此我们必须使用globalEval

我不确定为什么jQuery源使用window[ "eval" ].call eval.call而不仅仅是eval.call ,但我相信有人可以解释:)