SORU
11 Mart 2010, PERŞEMBE


Anonim fonksiyonları Javascript dosyaları gibi sararak bütün amacı nedir “(()fonksiyon{ ... })()”?

Son zamanlarda bir sürü Javascript okuyorum ve tüm dosya aşağıdaki gibi sarılmış olduğunu farkediyorum .js alınmak üzere dosyalar.

(function() {
    ... 
    code
    ...
})();

Yapıcı fonksiyonları basit bir set yerine bunu sebebi nedir?

CEVAP
11 Mart 2010, PERŞEMBE


Genellikle (daha sonra bakın), ve üye fonksiyonlar ve/veya değişken görünürlüğünü ad kontrol etmek. Bir nesne tanımı gibi düşünün. jQuery eklentileri genelde böyle yazılır.

Javascript fonksiyonları yerleştirebilirsiniz. Bu yüzden, aşağıdaki yasal

function outerFunction() {
   function innerFunction() {
      // code
   }
}

Şimdi outerFunction() diyebilirsin ama innerFunction() görünürlüğünü outerFunction() özel 12 ** anlam kapsamı ile sınırlıdır. Temelde Javascript: değişkenler olarak aynı prensibi izler

var globalVariable;

function someFunction() {
   var localVariable;
}

Buna bağlı olarak:

function globalFunction() {

   var localFunction1 = function() {
       //I'm anonymous! But localFunction1 is a reference to me!
   };

   function localFunction2() {
      //I'm named!
   }
}

Yukarıdaki senaryoda, herhangi bir yerden globalFunction() diyebilirsin, ama yapamazsınız localFunction1 localFunction2 Ara.

(function() { ... code ... })(), bir işlev içinde kod değişmez yapıyorsun (bütün anlam "" aslında bir fonksiyonudur) nesne. yazarken ne yaptığını Bundan sonra, kendi kendini çağıran fonksiyon (final ()). Dediğim gibi bu büyük bir avantaj sağlar, fonksiyonları ve özellikleri/özel yöntemleri var

(function() {
   var private_var;

   function private_function() {
     //code
   }
})()

Düzgün bir şey de içeride bir şeyler tanımlamak ve dış dünyaya bu kadar (temelde kendi kütüphane/plugin oluşturmak namespacing bir örnek) bulaşmasına neden olabilir

var myPlugin = (function() {
 var private_var;

 function private_function() {
 }

 return {
    public_function1: function() {
    },
    public_function2: function() {
    }
 }
})()

Şimdi myPlugin.public_function1() ama 23* *erişemiyor diyebilirsiniz! Yani bir sınıf tanımı için oldukça benzer. Bunu daha iyi anlamak için, biraz daha fazla okumak için aşağıdaki Linkleri tavsiye ederim:

EDİT

Söylemeyi unutmuşum. Son (), içinde istediğiniz her şeyi iletebilirsiniz. JQuery eklentileri oluşturduğunuzda, örneğin, gibi jQuery $ geçmek:

(function(jQ) { ... code ... })(jQuery) 

Burada ne aradığını bir parametre olarak alan bir fonksiyon tanımlama (jQ yerel bir değişken olarak adlandırılan ve bilinensadeceişlevi). Kendini çağıran fonksiyon ve jQuery, denir ama. (ayrıca bir parametre geçirmeden sonra ^em>bubir dış dünyadan ve gerçek jQuery) için bir referans. Bunu yapmak için acil ihtiyaç yok, ama bazı avantajları vardır:

  • Küresel bir parametre tanımlamak ve mantıklı bir isim verin yerel kapsamında edebilirsiniz.
  • Küresel kapsamı içine kapsam zinciri yürümek yerine şeyler yerel kapsamda aramak için daha hızlı olduğu için hafif bir performans avantajı var.
  • Sıkıştırma için faydaları (minification) vardır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • aki6336

    aki6336

    14 AĞUSTOS 2008
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • Shaollin Animes

    Shaollin Ani

    19 HAZİRAN 2013