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