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閉包概念簡單解析一章節。
相關文章
- JS中排序的用法和例項JS排序
- JavaScript閉包原理與用法例項JavaScript
- Python qutip用法(舉例介紹)Python
- 簡單介紹JavaScript閉包JavaScript
- Java CXF介紹與例項Java
- 3個例項介紹shell指令碼中幾個特殊引數的用法指令碼
- Vue.js自定義指令的用法與例項Vue.js
- mongodb關閉資料庫例項MongoDB資料庫
- 通過例項學習 PyTorchPyTorch
- js迴圈中reduce的用法簡單介紹JS
- 閉包學習 1--例項分析 ComposerStaticInitxx::getInitializer
- RDD用法與例項(五):glom的用法
- 通過例項理解 JDK8 的 CompletableFutureJDK
- 關於Python閉包的一切Python
- js閉包的理解JS
- js中的閉包JS
- 關於無線通訊的核心技術詳細介紹
- Vue Render介紹和一些基本的例項Vue
- Oracle例項關閉:SHUTDOWN: waiting for active calls to completeOracleAI
- Oracle RAC DRM介紹和關閉DRMOracle
- Java 中關於protected的介紹Java
- 關於 Node.js Stream API 的用法概述Node.jsAPI
- 對JS閉包的理解JS
- JS中的 閉包(Closure)JS
- JS閉包ClosureJS
- js閉包及閉包的經典使用場景JS
- 閉包概念是掌握React.JS的關鍵 - NitsanReactJS
- 【閉包概念】關於閉包概念不同解讀——你可以自己理解。
- 關於Golang struct{}{}用法和注意事項GolangStruct
- 包介紹
- 【集合論】關係閉包 ( 關係閉包求法 | 關係圖求閉包 | 關係矩陣求閉包 | 閉包運算與關係性質 | 閉包複合運算 )矩陣
- 關於 React Hooks 的簡單介紹ReactHook
- Rman關於filesperset引數的介紹
- 關於風機滑環的介紹
- 關於Oracle Database Vault介紹OracleDatabase
- 關於Luthier CI 路由介紹路由
- python 關於 函式物件與閉包Python函式物件
- python BeautifulSoup用法介紹Python
- 通過提交資訊來關閉issue