無意間建立的乙個閉包,以及解決的方法

2021-09-07 05:51:27 字數 405 閱讀 4393

閉包的本質是作用域鏈,我們在工作中常常無意間就會建立乙個閉包,比方:

執行之後,會發現每乙個onclick時間執行時彈出的都是11!

這是由於,onclick 函式是在 全域性作用域裡面被定義的,被定義的時候。會生成乙個物件。這個物件繼承了當前執行環境的作用域鏈。也就是說。這個函式執行體裡的 i 。引用的是全域性作用域裡的i。

由於 for 迴圈執行完以後,全域性作用域下的 i 的值變為了 11,所以才會每乙個onclick函式都彈出11。

為了解決問題,我們須要為每乙個 onclick 函式的生成建立乙個單獨的作用域。然後 onclick 函式彈出這個作用域裡面的 區域性變數:

無意間學到的乙個關於html的小知識點

本以為,你往東走,我往西走,我們就可以相遇,誰知道,卻是越來越遠.幸運皮 昨天開題,導師幫忙回答問題了,哈哈,真是囧.改天要總結一下開題的過程.今天去公司修改產品那邊給的意見,其中乙個問題是 列表顯示的時候有鏈結,每個鏈結的名字都是從資料庫裡面讀取出來的,結果顯示的時候,有的是分開,有的是連上的,就...

閉包的乙個坑

閉包的乙個坑 for var i 0 i 5 i 5 上面這個 塊會列印五個5出來,而我們預想的結果是列印 1 2 3 4 5。之所以會這樣,是因為 settimeout 中的 i 是對外層 i 的引用。當 settimeout 的 被解釋的時候,執行時只是記錄了 i 的引用,而不是值。而當 set...

乙個閉包的簡單例子

最近有很多朋友都在問我 閉包是什麼 開始自己也是懵逼的 琢磨了下 才有了了解 下面就為大家簡單的實現以下 如下 var a function a a to do console.log a 定義乙個匿名函式,把a傳遞進去,a是undefined 因為匿名函式本身沒有返回值,如果是 var a fun...