国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

簡短幾句 通俗解釋javascript的閉包

2019-11-20 23:58:43
字體:
來源:轉載
供稿:網友
何謂沒有被釋放資源的棧區和預執行的過程,用一個最常見的示例來解釋:
比方現在我們有一個ul,下面有很多個li,需要遍歷他們為他們綁定單擊事件,并在點擊后將當前下標傳遞給另外一個function來進行額外的處理:
復制代碼 代碼如下:

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

執行結果顯而易見對吧?在handler中,獲取傳遞過去的參數i,你看到的將全部是最大的下標,這個時候,我們通常用下面的辦法解決:
復制代碼 代碼如下:

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

那么在這里,先講一下this的指向問題,從通常來說,javascript中的this是指向當前引用他的對象的。上面我們相當為this新增了一個為i的屬性,他的值就是當前的下標值。
那么用閉包的方式如何解決這個問題?其實原理相同,我們需要預先的把i值保存起來,或叫作傳遞:
復制代碼 代碼如下:

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

這個時候你會得到正確的下標,這樣做與增加i屬性有何雷同之處?也就是他們都預先把下標i值傳遞或是儲存起來。在上面的演示中,預執行onclick所引用的函數,而這個
函數當中返回了一個內嵌函數,形成一個沒有被釋放資源的棧區,并在預執行的時候將i值以參數的形式傳入這個作用域(解釋能力有問題,這句解釋不知道是否準確,歡迎磚拍)。
綜上所述,閉包的作用通常是改變作用域或預執行。應該看官很明白了,上面個出的示例很局限,閉包的應用范圍是很廣的,了解其因果,才能靈活的使用它。
auntion 2011-11-15
mail Auntion@gmail.com
QQ 82874972
原創文章,請尊重打字的辛勞和作者的權益,轉載時請不要刪除這里的作者信息。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 诸城市| 四子王旗| 错那县| 洞口县| 峡江县| 阳朔县| 苗栗市| 长沙市| 黑山县| 汶上县| 若尔盖县| 本溪| 拉萨市| 娱乐| 华坪县| 云霄县| 武宁县| 突泉县| 临西县| 延安市| 磐石市| 江川县| 江永县| 南康市| 扶绥县| 文水县| 建瓯市| 奉贤区| 蓬莱市| 安平县| 红桥区| 会同县| 诸城市| 高碑店市| 轮台县| 修文县| 宜君县| 香港| 镇赉县| 牟定县| 稷山县|