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
,但我相信有人可以解释:)