for循环与闭包

来源:互联网 发布:如何想象高维空间 知乎 编辑:程序博客网 时间:2024/05/16 17:52

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();    >>>2f(); >>>3fn()();  >>>2先找局部作用域中的,局部没有找上级,上级还没有,就一直往上级找,直到window(全局作用域)。闭包的扩展:jQueryjquery本身就是一个大的闭包。1.$('div') 获取的是一个集合,但是这个集合中的每一项都可以执行对应的事件,并且有自己的索引值。理解:当这个集合执行点击事件的时候形成了一个闭包,这个闭包里面有一个变量对应着div的下标,这个变量就是for循环时候对应的i值。