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(全局作用域)。


闭包的扩展:jQuery

jquery本身就是一个大的闭包。
1.$('div') 获取的是一个集合,但是这个集合中的每一项都可以执行对应的事件,并且有自己的索引值。
理解:当这个集合执行点击事件的时候形成了一个闭包,这个闭包里面有一个变量对应着div的下标,这个变量就是for循环时候对应的i值。
posted @ 2017-06-29 20:10  rainbow8590  阅读(371)  评论(0编辑  收藏  举报