Подтвердить что ты не робот

Функция 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 );
    }
},

Действительно ли люди используют это в реальной жизни? Если да, то для чего?

4b9b3361

Ответ 1

Он используется, как следует из названия, для выполнения кода 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 script, и вы хотите выполнить это script в глобальном контексте (например, выше, нам может понадобиться example1, чтобы быть доступным вне example, поэтому мы должны использовать globalEval.

Я не уверен, почему источник jQuery использует window[ "eval" ].call вместо просто eval.call, но я уверен, что кто-то может объяснить:)