我偶然发现函数.globalEval()
浏览了jQuery源代码。有一点非常简短documentation,我不明白。显然,它“对于动态加载外部脚本很重要”。为什么?消息来源也有点模糊:
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 );
}
},
人们真的在现实生活中使用它吗?如果是这样,为了什么?
答案 0 :(得分:15)
顾名思义,它用于在全局上下文中执行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脚本,并且想要在全局上下文中执行该脚本(例如,上面,我们可能需要example1
在{{1}之外可用功能,所以我们必须使用example
。
我不确定为什么jQuery源代码使用globalEval
而不仅仅是window[ "eval" ].call
,但我确信有人可以解释:)