簡短幾句通俗解釋javascript的閉包_javascript技巧
來源:懂視網(wǎng)
責(zé)編:小采
時間:2020-11-27 20:56:56
簡短幾句通俗解釋javascript的閉包_javascript技巧
簡短幾句通俗解釋javascript的閉包_javascript技巧:何謂沒有被釋放資源的棧區(qū)和預(yù)執(zhí)行的過程,用一個最常見的示例來解釋: 比方現(xiàn)在我們有一個ul,下面有很多個li,需要遍歷他們?yōu)樗麄兘壎▎螕羰录⒃邳c擊后將當(dāng)前下標(biāo)傳遞給另外一個function來進(jìn)行額外的處理: 代碼如下: for(var i=0; i agro
導(dǎo)讀簡短幾句通俗解釋javascript的閉包_javascript技巧:何謂沒有被釋放資源的棧區(qū)和預(yù)執(zhí)行的過程,用一個最常見的示例來解釋: 比方現(xiàn)在我們有一個ul,下面有很多個li,需要遍歷他們?yōu)樗麄兘壎▎螕羰录⒃邳c擊后將當(dāng)前下標(biāo)傳遞給另外一個function來進(jìn)行額外的處理: 代碼如下: for(var i=0; i agro

何謂沒有被釋放資源的棧區(qū)和預(yù)執(zhí)行的過程,用一個最常見的示例來解釋:
比方現(xiàn)在我們有一個ul,下面有很多個li,需要遍歷他們?yōu)樗麄兘壎▎螕羰录⒃邳c擊后將當(dāng)前下標(biāo)傳遞給另外一個function來進(jìn)行額外的處理:
代碼如下:
for(var i=0; i agroup[i].onclick = function() {
handler(i);
}
}
執(zhí)行結(jié)果顯而易見對吧?在handler中,獲取傳遞過去的參數(shù)i,你看到的將全部是最大的下標(biāo),這個時候,我們通常用下面的辦法解決:
代碼如下:
for(var i=0; i agroup[i].i = i
agroup[i].onclick = function() {
handler(this.i);
}
}
那么在這里,先講一下this的指向問題,從通常來說,javascript中的this是指向當(dāng)前引用他的對象的。上面我們相當(dāng)為this新增了一個為i的屬性,他的值就是當(dāng)前的下標(biāo)值。
那么用閉包的方式如何解決這個問題?其實原理相同,我們需要預(yù)先的把i值保存起來,或叫作傳遞:
代碼如下:
for(var i=0; i agroup[i].onclick = function(index) {
return function() {
handler(index);
}
}(i);
}
這個時候你會得到正確的下標(biāo),這樣做與增加i屬性有何雷同之處?也就是他們都預(yù)先把下標(biāo)i值傳遞或是儲存起來。在上面的演示中,預(yù)執(zhí)行onclick所引用的函數(shù),而這個
函數(shù)當(dāng)中返回了一個內(nèi)嵌函數(shù),形成一個沒有被釋放資源的棧區(qū),并在預(yù)執(zhí)行的時候?qū)值以參數(shù)的形式傳入這個作用域(解釋能力有問題,這句解釋不知道是否準(zhǔn)確,歡迎磚拍)。
綜上所述,閉包的作用通常是改變作用域或預(yù)執(zhí)行。應(yīng)該看官很明白了,上面?zhèn)€出的示例很局限,閉包的應(yīng)用范圍是很廣的,了解其因果,才能靈活的使用它。
auntion 2011-11-15
mail Auntion@gmail.com
QQ 82874972
原創(chuàng)文章,請尊重打字的辛勞和作者的權(quán)益,轉(zhuǎn)載時請不要刪除這里的作者信息。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
簡短幾句通俗解釋javascript的閉包_javascript技巧
簡短幾句通俗解釋javascript的閉包_javascript技巧:何謂沒有被釋放資源的棧區(qū)和預(yù)執(zhí)行的過程,用一個最常見的示例來解釋: 比方現(xiàn)在我們有一個ul,下面有很多個li,需要遍歷他們?yōu)樗麄兘壎▎螕羰录⒃邳c擊后將當(dāng)前下標(biāo)傳遞給另外一個function來進(jìn)行額外的處理: 代碼如下: for(var i=0; i agro