jQuery .globalEval () функциясы

JQuery көзін қарап шығудан .globalEval() функциясына қатып кеттім. Мен түсінбеймін өте қысқа құжаттар бар. Шамасы, сыртқы сценарийлерді динамикалық түрде жүктеу маңызды. Неліктен? Дерек көзі де біраз түсініксіз:

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 );
    }
},

Адамдар оны нақты өмірде қолданып жатыр ма? Егер солай болса, не үшін?

13

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 сценарийін жүктеу қажет болса, пайдалы болуы мүмкін және сіз бұл сценарийді жаһандық контекстте орындағыңыз келеді (мысалы, жоғарыда example1 керек мысалы функциясы, сондықтан globalEval пайдалану керек.

JQuery көзі неге eval.call орнына window [«eval»] .call пайдаланатынына сенімді емеспін, бірақ біреу түсіндіре алатынына сенімдімін :)

15
қосылды
@Neil - ескі браузерлерде жұмыс істейтінін ойламаймын (мүмкін, jQuery неге браузердің кросс-браузерін ұсынады). Бұл келесі сұрақ бойынша талқыланады: stackoverflow.com/questions/7922073/…
қосылды автор James Allardice, көзі
Мен үшін (window.execScript || window.eval) (деректер) жұмыс істейді, бұл тіпті қарапайым.
қосылды автор Neil, көзі