关于Hoisting很像是变数被拉升到上层
提升变数不会赋值var a = 2 LHSconsole.log(a) RHS尚未宣告变数,即RHS该数值便会出现参考错误
console.log(a) //ReferenceError: a is not defined
这边Hoisting
console.log(a) //undefinedvar a = 1;var a;
Var
在学习了Let之后,尽量少用Var。原因是Var会被提升到全域变数并且被汙染,并且可以重複被宣告改赋值,造成程式错误
a = 1;var a;console.log(a) //1
compiler 会把程式看成两个叙述句
var aa = 2
Let
不能重複宣告
let u = 0let u = 1console.log(u) //SyntaxError: Identifier 'u' has already been declared
var a = 10function test(){ console.log(a) let a //ReferenceError: Cannot access 'a' before initialization}test()
Const
Const可以看作Let的加强版,并且Const不能改变赋值
var a = 10function test(){ console.log(a) const a //ReferenceError: Cannot access 'a' before initialization}test()