for循环与闭包
for循環和閉包
今天記錄for循環和閉包的使用:for(var i = 0 ; i < lis.length ; i++) {lis[i].onclick=function(i){return function(){console.log(i)}}(i); } 在for循環里面執行閉包的時候,將循環體的代碼儲存在一個內存中,對應的i值也儲存在了內存中(閉包不銷毀變量)。事件點擊的時候是執行return之后的函數,在執行的時候,因為作用域的原因,使用的是事件之后的函數中的i值,這個i值在循環的時候已經儲存為了對應的值,因此一次事件執行取到的i值都不一樣。作用域的問題:
var i = 5; function fn(){var i = 2;return function(){console.log(i)i++} } var f = fn();f(); >>>2 f(); >>>3 fn()(); >>>2先找局部作用域中的,局部沒有找上級,上級還沒有,就一直往上級找,直到window(全局作用域)。閉包的擴展:jQueryjquery本身就是一個大的閉包。 1.$('div') 獲取的是一個集合,但是這個集合中的每一項都可以執行對應的事件,并且有自己的索引值。 理解:當這個集合執行點擊事件的時候形成了一個閉包,這個閉包里面有一個變量對應著div的下標,這個變量就是for循環時候對應的i值。轉載于:https://www.cnblogs.com/rainbow8590/p/7096191.html
總結
- 上一篇: 关于研究的方法
- 下一篇: 基于原版Hadoop的YDB部署(转)