首頁  >  文章  >  web前端  >  JS中for迴圈閉包問題如何解決

JS中for迴圈閉包問題如何解決

小云云
小云云原創
2018-02-24 13:59:542720瀏覽

本文我們將和大家分享兩種JS中for迴圈閉包問題如何解決的方法,希望能幫助大家。


像這樣一個程式碼片段,初學者會理所當然地認為依序點擊Li會彈出對應的0、1、2、3、4、5,但實際結果卻是這樣的


我們無論點哪個按鈕,最後彈出來的都是6。這就是經典的for迴圈閉包問題。

那麼,首先讓我們來了解什麼是閉包,百度百科是這樣解釋的:閉包是可以包含自由(未綁定到特定物件)變數的程式碼區塊;這些變數不是在這個程式碼區塊內或任何全域上下文中定義的,而是在定義程式碼區塊的環境中定義(局部變數)。 「閉包」 一詞來自以下兩者的結合:要執行的程式碼區塊(由於自由變數被包含在程式碼區塊中,這些自由變數以及它們引用的物件沒有被釋放)和為自由變數提供綁定的計算環境(作用域)。在 Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Lua、objective c 以及Java(Java8以上)等語言中都能找到對閉包不同程度的支援。

而我的簡單理解就是:一個函數中嵌套了另一個函數,裡面的一個函數要存取外層函數的變量,所以就形成了一個閉包,閉包就是為了保留某些局部變數的值而存在的。

然而javascript 有些常見的閉包問題,例如上面的例子,那麼我們來看看怎麼解決這些問題。

解決方案一:加一層閉包,i 以函數參數形式傳遞給內層函數:

結果就是點選對應的li會彈出對應的數字,例如點第三個li,會出現以下效果:

解二:找個屬性將i值儲存起來,然後彈出這個值

點第三個li,會出現以下效果:

#相關推薦:

#JavaScript for迴圈if判斷語句詳解

for-in迴圈與for迴圈遍歷數組的用法

javascript中for循環使用時的注意事項

以上是JS中for迴圈閉包問題如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn