什麼是變量提升?
JavaScript引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然後再一步一步地運行。這造成的結果,就是所有的變量的聲明語句,都會被提升到代碼的頭部,這就叫變量提升
例1:
console.log(a);
var a=1;
上面的代碼首先使用console.log()方法,在控制檯顯示變量a的值,因爲a還沒有聲明和復賦值,但是並不會報錯,因爲變量提升了變成如下:
var a;
console.log(a); //undefined
a=1;
需要注意的一點:
變量提升只對var命令聲明的變量有效,如果一個變量不是用var命令聲明的,就不會發生變量提升
例2:
console.log(b);
b=1;
因爲b沒有用var聲明,所以不會發生變量提升,所有console.log(b)的執行結果會顯示b沒有聲明ReferenceError: b is not defined
例3:
var a=1;
console.log(a);
console.log(b);
var b=2;
console.log(c);
c=3;
上面代碼會變成:
var a;
var b;
a=1;
console.log(a); //1
console.log(b); //undefined
b=2;
console.log(c); //報錯
c=3;
因爲變量提升,a,b是用var聲明的變量,所以被提升到代碼頭部,值留在原地,c不是用var變量聲明的,所以無法變量提升。