JS閉包分享

S的閉包用法給開發帶來了極大的便利,它的使用方式很是天然,以致於不少同窗並不很瞭解閉包,卻能夠在實際開發中順暢的使用了

閉包

例以下面的代碼,給button添加一個點擊事件,不少人常常這麼寫,實際上這就是一個閉包函數

 

 

 

要了解閉包,須要先了解下JS變量的做用域

變量的做用域無非就是兩種:全局變量和局部變量

特色是 函數內部能夠訪問外部變量,函數外部不能訪問函數內的變量

事件

例如內存

 

 

 

這個很好理解,那麼如何從外部讀取局部變量?

那就是在函數的內部,再定義一個子函數,這個子函數能夠訪問外部的變量,而後父函數把這個子函數return,讓外部能夠經過子函數訪問本身的局部變量

例如作用域

 

 

 

這個實現方式就是閉包

什麼是閉包

閉包其實就是將函數內部和函數外部鏈接起來的一座橋樑,可讓函數外部的代碼訪問函數內容變量,能夠把閉包簡單理解成「定義在一個函數內部的函數」

閉包在子做用域中保存了一份在父級做用域取得的變量,這些變量不會隨父級做用域的銷燬而銷燬,由於他們已常常駐內存了

閉包應用示例

(1)實現公共、私有做用域控制

開發

既然閉包能夠對外提供訪問內容變量的方式,就能夠用這個特色實現相似 public private 做用域的需求it


 

 

(2)循環添加DOM事件

先看下面的代碼,目標是點擊不一樣的輸入框給出不一樣的提示

io

這是個經典案例,開發中很容易出現相似錯誤for循環

 

 

 

實際運行後,會發現,無論點擊哪一個輸入框,都會提示年齡的信息

function

下面的是正確方式,能夠按照需求正常顯示


 

 

緣由第一種方式出現錯誤,是由於在for循環結束後,變量item的值已經變爲了最後一項,因此當點擊事件執行時,讀取的信息老是最後一項的信息而第二個方式就是利用了閉包會把父級變量保存到本身做用域的特色,這樣每次循環添加點擊事件時,把當前循環中變量值傳給了function,這樣function就保存了正確的變量值

相關文章
相關標籤/搜索