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。

你可能感兴趣的:(Javascript)