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值。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值