1.變量提升
console.log('a:', a)
var a=3
console.log('b:', b)
let b=3
以上代碼,var變量會(huì)被提升命黔,經(jīng)編譯器編譯之后的代碼如下
var a
console.log('a:', a)
a=3
console.log('b:', b)
let b=3
很多人說(shuō)js是解釋性語(yǔ)言呜呐,其實(shí)是編譯后從上到下執(zhí)行;
執(zhí)行結(jié)果如下
結(jié)論:var會(huì)變量提升蘑辑,let不會(huì)變量提升
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作用域定義了一個(gè)a,if作用域定義了一個(gè)a,執(zhí)行之后洋魂,結(jié)果如下
假如代碼改成如下
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)
結(jié)果如下
結(jié)論:不同作用域可以重復(fù)定義變量,同一作用域不能重復(fù)定義變量
3.const注意事項(xiàng)
大多數(shù)情況下副砍,let和const有相同的準(zhǔn)則,只不過(guò)const定義的變量是不可變的豁翎,但是這是針對(duì)簡(jiǎn)單數(shù)據(jù)類(lèi)型(數(shù)字角骤,字符串和bool變量)心剥,如果是復(fù)雜類(lèi)型邦尊,雖然定義了const刘陶,但是依然可以改變牢撼,
const arr1 = []
arr1.push(2)
const obj1 = {}
obj1.name = 'test'
以上代碼匙隔,都能改變const變量的值
另外還有一個(gè)注意點(diǎn),const的變量必須賦值纷责,不然會(huì)報(bào)錯(cuò)