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

首頁 > 編程 > JavaScript > 正文

javascript 常見的閉包問題的解決辦法

2019-11-21 01:00:33
字體:
來源:轉載
供稿:網友


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

上段代碼本意是在每個div上都加一個事件,即每當點擊div時,就顯示此div的相應序號。但是運行程序時我們會發現,不論點擊那個,只會顯示7,這是什么愿因呢。--這就是閉包的問題
原來 在js中,函數中在定義函數,就出現閉包了。此時外層函數中變量是可以在里層函數里利用的,即使外層函數結束。但是當外層中出現循環的時候,如果在里層函數中利用這個循環變量的話,會直接引用這個變量的最終值。
就像上述代碼演示的一樣。
如何解決呢。
可以利用匿名函數來加以解決。匿名函數會制動執行,我們可以利用這一特性,來產生一個作用域,生命一個變量,來引用外層的循環變量。
如代碼所示:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

由于在內層函數里只要出現循環變量的話 都是最終值,所以我們利用匿名函數 激發出一個作用域,在進入內層循環之前,有另一變量獲得該循環變量的值,這一思想是處理閉包問題的精髓。

如下例子:此時并沒有明顯的for循環,但是 根據上述思想,可以立即加以解決 問題

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

解決后代碼:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

補充:看到有網友這樣解決了問題:

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]

我個人的理解是 在進入內層循環之前 把id賦值給f,f在作為內層循環的參數,其思想應該是一樣的.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丽水市| 大埔区| 洛宁县| 花莲市| 松滋市| 滕州市| 泸溪县| 榆树市| 松阳县| 乐昌市| 雅安市| 曲松县| 河西区| 新安县| 宿州市| 临猗县| 门头沟区| 姚安县| 澄城县| 富源县| 万盛区| 陈巴尔虎旗| 乡城县| 海宁市| 扶沟县| 名山县| 霍林郭勒市| 左权县| 苍山县| 义马市| 桂平市| 太康县| 沂源县| 左权县| 新闻| 贞丰县| 福海县| 遂平县| 米易县| 大姚县| 三江|