1.变量提升
console.log('a:', a)
var a=3
console.log('b:', b)
let b=3
以上代码,var变量会被提升,经编译器编译之后的代码如下
var a
console.log('a:', a)
a=3
console.log('b:', b)
let b=3
很多人说js是解释性语言,其实是编译后从上到下执行;
执行结果如下
image.png
结论:var会变量提升,let不会变量提升
2.let的作用域
function Test(param){
console.log(param)
let a = 'outer'
if(param == 3){
let a = 'inner'
console.log(a)
}
console.log(a)
}
Test(1)
Test(3)
以上的代码,Test作用域定义了一个a,if作用域定义了一个a,执行之后,结果如下
image.png
假如代码改成如下
function Test(param){
console.log(param)
let a = 'outer'
if(param == 3){
let a = 'inner'
console.log(a)
}
let a = 'reSet'
console.log(a)
}
Test(1)
结果如下
image.png
结论:不同作用域可以重复定义变量,同一作用域不能重复定义变量
3.const注意事项
大多数情况下,let和const有相同的准则,只不过const定义的变量是不可变的,但是这是针对简单数据类型(数字,字符串和bool变量),如果是复杂类型,虽然定义了const,但是依然可以改变,
const arr1 = []
arr1.push(2)
const obj1 = {}
obj1.name = 'test'
以上代码,都能改变const变量的值
另外还有一个注意点,const的变量必须赋值,不然会报错