jQuery .globalEval () işlevi

JQuery kaynağına göz atmak için .globalEval() işlevine tökezledim. Anlamadığım çok kısa bir dokümantasyon var. Görünüşe göre, "harici komut dosyalarını dinamik olarak yüklemek önemlidir". Niye ya? Kaynak da biraz belirsiz:

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

İnsanlar bunu gerçek hayatta mı kullanıyorlar? Eğer öyleyse, ne için?

13

1 cevap

Adından da anlaşılacağı gibi, global bağlamda eval kodunu çalıştırmak için kullanılır. Örneğin, aşağıdakileri göz önünde bulundurun ( 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

globalEval kullanılarak example1 tanımlandığı için, global kapsamdadır. Düz eski normal değerlendirme kullanarak, değişken yalnızca değerlendirmenin çağrıldığı kapsamda kullanılabilir.

Başka bir JS betiğini yüklemek istiyorsanız ve bu komut dosyasını genel bağlamda yürütmek istiyorsanız (örneğin, yukarıda example1 'e sahip olmak için dışında kullanılabilir. Örnek işlevi, bu yüzden globalEval 'i kullanmalıyız.

JQuery kaynağının neden eval.call yerine window ["eval"] .call 'ı kullandığını bilmiyorum ama eminim ki birisi açıklayabilir :)

15
katma
@Neil - Eski tarayıcılarda çalışacağını sanmıyorum (muhtemelen jQuery bunun için bir tarayıcılar arası yöntem sağlamaktadır). Bu şu anda takip eden bir soruda ele alınmaktadır: stackoverflow.com/questions/7922073/…
katma yazar James Allardice, kaynak
Benim için (window.execScript || window.eval) (veri) çalıştığı görünüyor, ki bu daha da basit.
katma yazar Neil, kaynak