JS閉包問題

2021-10-01 18:17:08 字數 431 閱讀 8496

因為你需要在事件內使用事件外的迴圈變數i。

你的迴圈中只是為元素繫結事件,這時事件並沒有觸發執行。

等到事件觸發時,那個迴圈早已經結束了,那時的i的值已經是迴圈最大值加1了。

所以需要用一些方式儲存住當前迴圈的i的值。

方案1為:用閉包儲存住當前迴圈的i的值。

for(

var i=

0;i)(i);}

方案2為:用let塊作用域變數,原理也是閉包(ie11以前不支援)

for(

var i=

0;i方案3為:在事件函式內不使用迴圈變數i,而是用this獲取觸發事件的元素

for(

var i=

0;i如果你只是要獲取觸發事件的元素,而不需要使用迴圈變數i。可以直接在事件函式內用this就可以了。

js的閉包問題

首先我們需要了解閉包,了解閉包就要了解全域性變數和區域性變數。在之前的js相關部落格中,已經提到過全域性變數和區域性變數。全域性變數是在整個js的作用範圍,還要了解在定義全域性變數時,它前面的關鍵字是可以省略的。而區域性變數作用範圍只是在當前的作用域。我們在呼叫區域性變數時要使用到return語句,...

JS的永恆閉包問題

我理解的閉包就是 乙個函式裡邊包含另外乙個函式,並且裡邊的函式可以讀取這個函式外邊函式裡邊的任何資訊。內層的函式可以使用外層函式的所有變數,即使這個外層函式已經執行完畢了。閉包可以用在許多地方,它的最大用處有兩個 第乙個是前面提到的可以讀取函式內部的變數 區域性變數 第二個就是讓這些變數的值始終保持...

JS閉包中的this問題

首先看一段 var obj var c obj.get console.log c 那麼輸出c的值為多少呢?看下圖 這說明obj.get 只是返回乙個匿名函式,並沒有執行。所以轉到this,相應的 為 var name ss var obj var val obj.get console.log v...