javascript 常見(jiàn)的閉包問(wèn)題的解決辦法
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
上段代碼本意是在每個(gè)div上都加一個(gè)事件,即每當(dāng)點(diǎn)擊div時(shí),就顯示此div的相應(yīng)序號(hào)。但是運(yùn)行程序時(shí)我們會(huì)發(fā)現(xiàn),不論點(diǎn)擊那個(gè),只會(huì)顯示7,這是什么愿因呢。--這就是閉包的問(wèn)題
原來(lái) 在js中,函數(shù)中在定義函數(shù),就出現(xiàn)閉包了。此時(shí)外層函數(shù)中變量是可以在里層函數(shù)里利用的,即使外層函數(shù)結(jié)束。但是當(dāng)外層中出現(xiàn)循環(huán)的時(shí)候,如果在里層函數(shù)中利用這個(gè)循環(huán)變量的話(huà),會(huì)直接引用這個(gè)變量的最終值。
就像上述代碼演示的一樣。
如何解決呢。
可以利用匿名函數(shù)來(lái)加以解決。匿名函數(shù)會(huì)制動(dòng)執(zhí)行,我們可以利用這一特性,來(lái)產(chǎn)生一個(gè)作用域,生命一個(gè)變量,來(lái)引用外層的循環(huán)變量。
如代碼所示:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
由于在內(nèi)層函數(shù)里只要出現(xiàn)循環(huán)變量的話(huà) 都是最終值,所以我們利用匿名函數(shù) 激發(fā)出一個(gè)作用域,在進(jìn)入內(nèi)層循環(huán)之前,有另一變量獲得該循環(huán)變量的值,這一思想是處理閉包問(wèn)題的精髓。
如下例子:此時(shí)并沒(méi)有明顯的for循環(huán),但是 根據(jù)上述思想,可以立即加以解決 問(wèn)題
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
解決后代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
補(bǔ)充:看到有網(wǎng)友這樣解決了問(wèn)題:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
我個(gè)人的理解是 在進(jìn)入內(nèi)層循環(huán)之前 把id賦值給f,f在作為內(nèi)層循環(huán)的參數(shù),其思想應(yīng)該是一樣的.
相關(guān)文章
BootStrap Select清除選中的狀態(tài)恢復(fù)默認(rèn)狀態(tài)
PC端項(xiàng)目中經(jīng)常會(huì)出現(xiàn)大量的數(shù)據(jù)列表頁(yè)面,涉及到下拉框選擇篩選條件;當(dāng)時(shí)用到bootstrap-select下拉框時(shí)該如何點(diǎn)擊重置按鈕就清除下拉框的選中狀態(tài)呢?下面通過(guò)本文給大家介紹下,需要的的朋友參考下吧2017-06-06
表單提交前觸發(fā)函數(shù)返回true表單才會(huì)提交
這篇文章主要介紹了表單提交前觸發(fā)函數(shù)當(dāng)返回true表單才會(huì)提交的具體實(shí)現(xiàn),需要的朋友可以參考下2014-03-03
javascript 禁止復(fù)制網(wǎng)頁(yè)
常見(jiàn)的一些禁止復(fù)制網(wǎng)頁(yè)的代碼,但破解方法也不見(jiàn)容易,這里就不說(shuō)了,可以看本站以前發(fā)布的文章。2009-06-06
JavaScript格式化日期時(shí)間的方法和自定義格式化函數(shù)示例
JavaScript默認(rèn)的時(shí)間格式我們一般情況下不會(huì)用,所以需要進(jìn)行格式化,下面說(shuō)說(shuō)我總結(jié)的JavaScript時(shí)間格式化方法2014-04-04
JavaScript跨瀏覽器獲取頁(yè)面中相同class節(jié)點(diǎn)的方法
這篇文章主要介紹了JavaScript跨瀏覽器獲取頁(yè)面中相同class節(jié)點(diǎn)的方法,本文講解使用getELementsByClassName函數(shù)解決這個(gè)需求,并給了一個(gè)開(kāi)源的getELementsByClassName函數(shù)實(shí)現(xiàn),功能更加強(qiáng)大,需要的朋友可以參考下2015-03-03
JavaScript樹(shù)形結(jié)構(gòu)數(shù)組處理之遞歸問(wèn)題
這篇文章主要介紹了JavaScript樹(shù)形結(jié)構(gòu)數(shù)組處理之遞歸問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
通過(guò)微信公眾平臺(tái)獲取公眾號(hào)文章的方法示例
這篇文章主要介紹了通過(guò)微信公眾平臺(tái)獲取公眾號(hào)文章的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Javascript實(shí)現(xiàn)的鼠標(biāo)經(jīng)過(guò)時(shí)播放聲音
今天突然想起做一個(gè)當(dāng)鼠標(biāo)經(jīng)過(guò)<a/>時(shí),會(huì)發(fā)出聲音2010-05-05
JavaScript實(shí)現(xiàn)點(diǎn)擊自動(dòng)選擇TextArea文本的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)點(diǎn)擊自動(dòng)選擇TextArea文本的方法,涉及javascript中focus()、select()方法的使用技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-07-07

