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 🙂