ES6块级作用域--如何简单理解

https://www.imooc.com/video/16699 视频地址


  • 使用ES5的情况
var callbacks=[]
for(var i=0; i<=2; i++){
    callbacks[i]=function(){
        return i*2
    }
}
console.log([
    callbacks[0](),
    callbacks[1](),
    callbacks[2](),
])

由于var声明的i是局部作用域的原因,这段声明语句会被变量提前,也就是i的声明会提前到for 循环的前面,所以下面调用callbacks的时候,i都是变成了3才开始进入循环,得到的结果就是6,6,6。

  • 使用ES6的情况
var callbacks2=[]
for(let j=0; j<=2; j++){
    callbacks[j]=function(){
        return j*2
    }
}
console.log([
    callbacks2[0](),
    callbacks2[1](),
    callbacks2[2](),
])

用es6的let声明块级变量就能解决这个闭包的问题,也就是将j变量声明在了for循环内,得到的结果就是0,2,4。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值