ES6-块级作用域

119 阅读1分钟

var 的变量提升

变量提升的机制是指在函数作用域或全局作用域中通过关键字 var 声明的变量都会被当成在当前作用域顶部声明的变量

块级作用域

为了强化对变量生命周期的控制,ECMAScript 6 引入了块级作用域(词法作用域),存在于

  • 函数内部
  • 块中(字符{和}之间的区域)

let、const 声明特点

共同特点

  • 变量不会被提升
  • 变量作用域限制在当前代码块
  • 禁止重复声明

区别

  • const 声明的是常量,其值一旦被设定后不可更改
  • const 声明的常量必须进行初始化
for( var i=0;i<10;i++ ){
}
console.log( i )   //10

for( var i=0;i<10;i++ ){
}
console.log( i )   //i is not defined

//循环里的每次迭代同时共享着变量i,循环内部创建的函数全都保留了对相同变量的引用
var a = []
for (var i = 0; i < 3; i++) {
  a[i] = function() {
    console.log(i)
  }
}
a[0]() //3
a[1]() //3
a[2]() //3


//let声明,每次迭代循环都会创建一个新变量,并以之前迭代中同名变量的值将其初始化
let a = []
for (let i = 0; i < 3; i++) {
  a[i] = function() {
    console.log(i)
  }
}
a[0]() //0
a[1]() //1
a[2]() //2

块级绑定最佳实践的进化

默认使用 const,只有确实需要改变变量的值时使用 let