Fonction jQuery .globalEval ()

Je suis tombé sur la fonction .globalEval() de parcourir la source jQuery. Il existe une très brève documentation que je ne comprends pas. Apparemment, il est “important pour le chargement dynamic de scripts externes”. Pourquoi? La source est aussi un peu obscure:

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

Est-ce que les gens l’utilisent réellement dans la vie réelle? Si oui, pour quoi?

Comme son nom l’indique, il est utilisé pour exécuter le code eval dans le contexte global. Par exemple, considérons ce qui suit ( 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 

Comme example1 été défini à l’aide de globalEval , il est dans la scope globale. En utilisant old old eval normal, la variable n’est disponible que dans l’étendue dans laquelle eval est appelée.

Cela peut être utile si vous voulez charger un autre script JS et que vous voulez exécuter ce script dans le contexte global (par exemple, nous aurons peut-être besoin que example1 soit disponible en dehors de la fonction example . Nous devons donc utiliser globalEval .

Je ne sais pas pourquoi la source jQuery utilise window[ "eval" ].call au lieu de simplement eval.call , mais je suis sûr que quelqu’un pourrait expliquer 🙂