亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡(jiǎn)短幾句 通俗解釋javascript的閉包

 更新時(shí)間:2011年01月17日 22:37:15   作者:  
什么是閉包呢?閉包就是函數(shù)實(shí)例執(zhí)行過(guò)程中動(dòng)態(tài)產(chǎn)生一個(gè)沒有被釋放資源的棧區(qū),也是一個(gè)預(yù)執(zhí)行的過(guò)程。
何謂沒有被釋放資源的棧區(qū)和預(yù)執(zhí)行的過(guò)程,用一個(gè)最常見的示例來(lái)解釋:
比方現(xiàn)在我們有一個(gè)ul,下面有很多個(gè)li,需要遍歷他們?yōu)樗麄兘壎▎螕羰录?,并在點(diǎn)擊后將當(dāng)前下標(biāo)傳遞給另外一個(gè)function來(lái)進(jìn)行額外的處理:
復(fù)制代碼 代碼如下:

for(var i=0; i<agroup.length; i++) {
  agroup[i].onclick = function() {
    handler(i);
  }
}

執(zhí)行結(jié)果顯而易見對(duì)吧?在handler中,獲取傳遞過(guò)去的參數(shù)i,你看到的將全部是最大的下標(biāo),這個(gè)時(shí)候,我們通常用下面的辦法解決:
復(fù)制代碼 代碼如下:

for(var i=0; i<agroup.length; i++) {
  agroup[i].i = i
  agroup[i].onclick = function() {
    handler(this.i);
  }
}

那么在這里,先講一下this的指向問(wèn)題,從通常來(lái)說(shuō),javascript中的this是指向當(dāng)前引用他的對(duì)象的。上面我們相當(dāng)為this新增了一個(gè)為i的屬性,他的值就是當(dāng)前的下標(biāo)值。
那么用閉包的方式如何解決這個(gè)問(wèn)題?其實(shí)原理相同,我們需要預(yù)先的把i值保存起來(lái),或叫作傳遞:
復(fù)制代碼 代碼如下:

for(var i=0; i<agroup.length; i++) {
  agroup[i].onclick = function(index) {
    return function() {
      handler(index);
    }
  }(i);
}

這個(gè)時(shí)候你會(huì)得到正確的下標(biāo),這樣做與增加i屬性有何雷同之處?也就是他們都預(yù)先把下標(biāo)i值傳遞或是儲(chǔ)存起來(lái)。在上面的演示中,預(yù)執(zhí)行onclick所引用的函數(shù),而這個(gè)
函數(shù)當(dāng)中返回了一個(gè)內(nèi)嵌函數(shù),形成一個(gè)沒有被釋放資源的棧區(qū),并在預(yù)執(zhí)行的時(shí)候?qū)值以參數(shù)的形式傳入這個(gè)作用域(解釋能力有問(wèn)題,這句解釋不知道是否準(zhǔn)確,歡迎磚拍)。
綜上所述,閉包的作用通常是改變作用域或預(yù)執(zhí)行。應(yīng)該看官很明白了,上面?zhèn)€出的示例很局限,閉包的應(yīng)用范圍是很廣的,了解其因果,才能靈活的使用它。
auntion 2011-11-15
mail Auntion@gmail.com
QQ 82874972
原創(chuàng)文章,請(qǐng)尊重打字的辛勞和作者的權(quán)益,轉(zhuǎn)載時(shí)請(qǐng)不要?jiǎng)h除這里的作者信息。

相關(guān)文章

最新評(píng)論