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

本文通过对比ES5与ES6中闭包的实现方式,解释了使用不同变量声明方式导致的行为差异。在ES5中,由于变量提升机制,闭包捕获的变量值相同;而在ES6中,let声明解决了此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值