js閉包解決多個點選事件

2022-05-04 06:27:07 字數 431 閱讀 5457

通常我們在前端中要為若干個節點新增相同的事件,為了減少**量便想出使用上面的**對這些節點進行迴圈繫結事件。然而事情並未像之前預想到的那樣,實驗後會發現無論點選哪個元素都會彈出several.length,而不是我們之前預想的i。這正是閉包(匿名函式)要使用外部作用於中變數的結果。而卻,這也是由於匿名函式本身無法傳遞引數(故無法維護自己的作用域)造成的。

當函式呼叫外部變數是就構成乙個閉包,裡面的變數會受到別的地方影響,所以解決的方式為:構建乙個只有該匿名函式本身才可以訪問的閉包,儲存只供本身使用的變數。

for(var i=0;i)

})(i);

}

上面建立了匿名函式,從而構建了乙個新的作用域。匿名函式需要傳乙個引數,所以在執行的時候需要傳乙個引數。也正是通過這個引數維護了中間狀態。

**:

js中for迴圈點選事件(閉包)

以上 期望依次輸出0,1,2,3,4,實際卻輸出5,5,5,5,5,這是因為閉包導致,下來來具體介紹 for迴圈是乙個外部閉包,依次繫結的點選事件是乙個函式例項,也產生了乙個閉包域,它引用了外部閉包的變數i,外部閉包域中i的最終值為5,點選事件觸發時引用外部閉包變數i 此時i 5 所以輸出的值全為5...

閉包 解決閉包問題

1 函式和對其周圍狀態 lexical environment,詞法環境 的引用 在一起構成閉包 closure 2 函式與函式所依賴的上下文環境組成閉包問題。3 閉包指的是 能夠訪問另乙個函式作用域的變數的函式。清晰的講 閉包就是乙個函式,這個函式能夠訪問其他函式的作用域中的變數。var arr ...

js觸發點選事件

最簡單的觸發單擊事件肯定是elem.click 平時在不需要考慮相容性的場合我都是這麼幹的,但是畢竟這個方法有相容性 具體相容性如何沒做過測試 所以還是要掌握乙個通用的方法。以下 是網上比較容易找到的一段 我在前面加了一段mouseevent的判斷 觸發單擊事件 param elem 需要觸發事件的...