Penjelasan terperinci tentang penggunaan js closure_Pengetahuan asas

WBOY
Lepaskan: 2016-05-16 16:31:45
asal
1669 orang telah melayarinya

Mari kita lihat kegunaan penutupan. Sebenarnya, dengan menggunakan penutupan, kita boleh melakukan banyak perkara. Sebagai contoh, ia boleh mensimulasikan gaya pengekodan berorientasikan objek dalam beberapa aspek;

1 fungsi laksana sendiri tanpa nama

Kami mengetahui semua pembolehubah jika anda tidak menambah kata kunci var, ia akan ditambahkan pada sifat objek global secara lalai Terdapat banyak kelemahan untuk menambahkan pembolehubah sementara tersebut pada objek global,
Contohnya: fungsi lain mungkin menyalahgunakan pembolehubah ini menyebabkan objek global menjadi terlalu besar dan menjejaskan kelajuan capaian (kerana nilai pembolehubah perlu dilalui daripada rantaian prototaip).
Selain menggunakan kata kunci var setiap kali pembolehubah digunakan, kita sering menghadapi situasi sedemikian dalam situasi sebenar, iaitu, sesetengah fungsi hanya perlu dilaksanakan sekali dan pembolehubah dalaman mereka tidak perlu dikekalkan
Contohnya, untuk permulaan UI, kita boleh menggunakan penutupan:

Salin kod Kod adalah seperti berikut:

var datamodel = { 
jadual: [],
pokok : {}
}; 
 
(fungsi(dm){ 
untuk(var i = 0; i < dm.table.rows; i ){
      baris var = dm.table.rows[i];                             untuk(var j = 0; j < row.cells; i ){
             drawCell(i, j);                                                                                                           }  
                           
//bina dm.tree
})(model data);



Kami mencipta fungsi tanpa nama dan melaksanakannya dengan segera Memandangkan pembolehubah di dalamnya tidak boleh dirujuk dari luar,
Oleh itu, ia akan dikeluarkan tidak lama lagi selepas pelaksanaan Perkara utama ialah mekanisme ini tidak akan mencemarkan objek global.

2 cache

Mari kita lihat contoh lain. Bayangkan kita mempunyai objek fungsi yang pemprosesannya sangat memakan masa. Setiap panggilan akan mengambil masa yang lama Kemudian kita perlu menyimpan nilai yang dikira Apabila memanggil fungsi ini, mula-mula cari dalam cache Jika ia tidak dijumpai, kemudian hitungkannya,

Kemudian kemas kini cache dan kembalikan nilai Jika dijumpai, kembalikan nilai yang ditemui secara langsung. Penutupan melakukan perkara ini kerana ia tidak mengeluarkan rujukan luaran,

Oleh itu nilai di dalam fungsi boleh dikekalkan.




Salin kod

Kod adalah seperti berikut:

var CachedSearchBox = (function(){
var cache = {},
Kira = [];
Kembali {
attachSearchBox: function(dsid){
                 jika (dsid dalam cache) {//Jika hasilnya ada dalam cache                                                                                                 Kembalikan cache [dsid]; // Kembali ke objek dalam cache terus
                                                                                  var fsb = uikit.webctrl.SearchBox(dsid);//Baharu  
              cache [dsid] = fsb;//Kemas kini cache                                                       Jika (count.length & gt; 100) {// Saiz cache & lt;                                                                                                                                                                                                                                   ...                                                                                      pulangkan fsb;                                                               },                                                       
Clearsearchbox: Fungsi (dsid) {
Jika(dsid dalam cache){
cache[dsid].clearSelection();                                                                                                                                                };  
})();
 
CachedSearchBox.attachSearchBox("input1");


Dengan cara ini, apabila kami memanggil CachedSearchBox.attachSerachBox("input1") untuk kali kedua,
Kami boleh mendapatkan semula objek daripada cache tanpa membuat objek kotak carian baharu.

3 Laksanakan enkapsulasi

Anda boleh melihat contoh enkapsulasi dahulu Pembolehubah dalaman tidak boleh diakses di luar orang itu, tetapi boleh diakses dengan menyediakan penutupan:



Salin kod


Kod adalah seperti berikut:

var orang = function(){ 

//Skop pembolehubah berada di dalam fungsi dan tidak boleh diakses dari luar

var name = "default"; var name

person.setName("abruzzi");
print(person.getName());



Hasilnya adalah seperti berikut:

tidak ditentukan
lalai
abruzzi

4 Satu lagi penggunaan penutup yang penting adalah untuk melaksanakan objek dalam bahasa objek tradisional menyediakan mekanisme templat kelas,
Dengan cara ini, objek yang berbeza (contoh kelas) mempunyai ahli dan keadaan bebas dan tidak mengganggu satu sama lain. Walaupun tiada mekanisme seperti kelas dalam JavaScript, dengan menggunakan penutupan,
Kita boleh mensimulasikan mekanisme sedemikian. Mari kita ambil contoh di atas:





Salin kod
Kod adalah seperti berikut:


Funktion Person(){ 
Var-Name = „Standard“; Var-Name
                           
Geben Sie {
zurück           getName : function(){                                                    Rückname;                                                     },                                                              setName : function(newName){                                               name = newName;                                                                                                                       }  
}; 
​  
​  
var john = Person();
print(john.getName());
john.setName("john");
print(john.getName());
​  
var jack = Person();
print(jack.getName());
jack.setName("jack");
print(jack.getName());



Die Laufergebnisse sind wie folgt:

Standard
John
Standard Jack

Aus diesem Code ist ersichtlich, dass sowohl John als auch Jack als Instanzen der Person-Klasse bezeichnet werden können, da der Zugriff der beiden Instanzen auf das Namensmitglied unabhängig ist und sich nicht gegenseitig beeinflusst.

Das Obige ist die Funktion des js-Abschlusses. Es ist sehr einfach und leicht zu verstehen. Ich hoffe, es wird meinen Freunden helfen

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan