我偶然发现了.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 );
}
},
Run Code Online (Sandbox Code Playgroud)
人们真的在现实生活中使用它吗?如果是这样,为了什么?
Jam*_*ice 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
Run Code Online (Sandbox Code Playgroud)
因为example1是使用定义的globalEval,所以它在全球范围内.使用普通旧法线eval,该变量仅在eval调用的范围内可用.
如果要加载另一个JS脚本,并且想要在全局上下文中执行该脚本(例如,上面,我们可能需要example1在example函数外部使用,因此我们必须使用它)globalEval.
我不知道为什么jQuery的源使用window[ "eval" ].call,而不是只eval.call,但我敢肯定有人可以解释一下:)