一、var:
1、提升
console.log(num)
var num = 1
var定义的变量会声明提升,可以理解为:
var num
console.log(num)
num = 1
2、变量覆盖
var num = 1
var num = 2
console.log(num)
这段代码并不会报错,以上代码可以看成:
var num
num = 1
num = 2
console.log(num)
3、没有块级作用域
function demo(){
for(var i=0
}
console.log(i)
}
由于没有块级作用域,循环之后,i仍然存在
4、var在全局作用域下声明变量会挂载在 window 上
var num = 1
console.log(window.num)
5、var是具有函数作用域的
var a = 1
function fn() {
var a = 10
}
fn()
console.log(a)
在函数中用var声明的变量和全局作用域的相同,也不会进行覆盖。
二、let、const:
1、const声明的变量必须赋初始值、let则不用
2、const定义的值无法直接更改,而let定义的值可以更改
3、let、const 定义的变量不会挂载在 window 上
let num1 = 1
let num2 = 2
console.log(window.num1)
console.log(window.num2)
4、支持块级作用域
三、暂时性死区:
function demo(){
console.log(num)
let num = 1
}
let、const 存在暂时性死区,声明前不可使用