jQuery .globalEval()函数

时间:2011-10-27 20:20:05

标签: jquery

我偶然发现函数.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 );
    }
},

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

1 个答案:

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