js通過例項介紹關於閉包的用法
閉包是一個比較晦澀難以理解的概念,特別是對於沒有任何程式設計經驗的新手來說。
如果完全就是一大通的理論,這也許很不利於一些朋友對於此概念的理解,下面就通過例項程式碼的方式來介紹一下。
下面先來看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> </head> <script type="text/javascript"> window.onload=function(){ var a=document.getElementsByTagName("a"); function b(){ for(var index=0;index<a.length;index++){ a[index].onclick=function(){ alert(index); } } } b(); } </script> <body> <a href="#">螞蟻部落一</a> <a href="#">螞蟻部落二</a> <a href="#">螞蟻部落三</a> </body> </html>
上面的程式碼本來意圖是,點選連結的時候,能夠彈出對應的連結的索引值。
但是令人失望的是,每一次都是彈出3,下面介紹一下原因:
上述函式未能達到目的的原因是,事件處理函式繫結了變數index,而該事件處理函式又賦值給onclick,也就是說只有在點選a標籤的時候才會呼叫該函式,因此從邏輯上來說,在單純的for迴圈裡面function(){alert(index);}這段函式實際上是沒有執行的,而當我們點選a標籤的時候for迴圈早就已經執行完畢,此時index的值就是for迴圈執行完畢的終態值。通俗一點理解,就是這個index的值是屬於b函式的,而我們需要的i的值是實時傳遞進事件處理函式中的值,使用閉包就可以解決上述問題,程式碼如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> </head> <script type="text/javascript"> window.onload=function(){ var a=document.getElementsByTagName("a"); function b(){ for(var index=0;index<a.length;index++){ a[index].onclick=function(index){ return function(){ alert(index); } }(index); } } b(); } </script> <body> <a href="#">螞蟻部落一</a> <a href="#">螞蟻部落二</a> <a href="#">螞蟻部落三</a> </body> </html>
關於閉包的更多內容可以參閱javascript閉包概念簡單解析一章節。
相關文章
- $.getJSON()用法程式碼例項介紹JSON
- 閉包用法結合例項詳解
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-關於例項關閉Oracle
- JS作用域與閉包--例項JS
- js清除閉包的通常方式簡單介紹JS
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-關於例項啟動Oracle
- javascript閉包概念介紹JavaScript
- javascript閉包的理解和例項JavaScript
- JavaScript閉包原理與用法例項JavaScript
- 閉包程式碼例項演示
- 簡單介紹JavaScript閉包JavaScript
- require.js用法介紹UIJS
- JS中排序的用法和例項JS排序
- javascript閉包用法例項程式碼分析JavaScript
- 2 Day DBA-管理Oracle例項-關於例項的啟動和關閉-管理啟動和關閉許可權Oracle
- js lastIndexOf()函式的用法介紹JSASTIndex函式
- js的returnValue屬性用法介紹JS
- python閉包詳解(例項)Python
- Python 關於JSON模組介紹PythonJSON
- javascript中的閉包概念簡單介紹JavaScript
- Python qutip用法(舉例介紹)Python
- 關於JS中變數的作用域-例項JS變數
- Oracle 資料庫例項啟動關閉過程Oracle資料庫
- js WebSocket用法簡單介紹JSWeb
- $.ajax()用法例項程式碼介紹
- angularJS的router用法簡單介紹AngularJS
- js中getBoundingClientRect()的用法介紹JSGCclient
- javascript閉包簡單程式碼例項JavaScript
- Java CXF介紹與例項Java
- 3個例項介紹shell指令碼中幾個特殊引數的用法指令碼
- Oracle例項的啟動和關閉Oracle
- js微信視窗關閉事件簡單程式碼例項JS事件
- js倒數計時關閉頁面程式碼例項JS
- 關於JSP 例項方法的執行緒安全JS執行緒
- js中typeof用法詳細介紹JS
- 哪裡有關於Struts標籤庫的詳細介紹和應用例項呢?
- js isNaN函式的用法簡單介紹JSNaN函式
- js中大括號{}的用法簡單介紹JS