1.var 声明及变量提升
console.log(name) // undefined
var name = 'joker'
上面这段代码不会报错,打印结果为 undefined,因为变量的声明会被提升,等价于
var name
console.log(name) // undefined
name = 'joker'
var 在 for 循环中:
for (i = 1; i < 5; i++) {
setTimeout(() => {
console.log(i)
}), 0
}
结果为 4 4 4 4, 循环结束后所有循环体公用一个变量 i = 4,所以打印结果为 4 4 4 4
2.let 声明
let 申明属于块级申明,用 let 代替 var 来申明变量,就可以把变量的作用域限制在当前代码块中;
console.log(name) // not defined
let name = 'joker'
此时,代码会报错
禁止重声明
加入作用域中已经存在某个标识符, 再使用 let 关键字会报错
3.const
const 的作用与 let 基本相同,const 申明的变量不可更改,且申明时就当赋值。