JavaScript變量聲明與提升
阿新 • • 發佈:2017-12-14
聲明變量 gpo spa col for語句 {} define 什麽 模糊
一直以來對變量提升都是比較模糊的,今天特地看了一下這個知識點,總結一下。
1、舉個最簡單的例子來說一下什麽是變量提升吧。
function foo(){ console.log(x); // undefined var x = 12; console.log(x) // 12 } foo();
由於變量聲明提升,其實上述代碼相當於
function foo(){ var x; console.log(x); // undefined x = 12; console.log(x) // 12 } foo();
可以看出,變量提升其實是變量聲明的提升,變量值並沒有提升。
現在將上述代碼變一下。
var x = 123; function foo(){ console.log(x); // undefined var x = 12; console.log(x) // 12 } foo(); console.log(x) // 123 這裏之所以結果為123,是因為在函數內聲明的變量x雖然與函數外同名,但由於是在函數內且用關鍵字var來聲明的,所以函數內的x只是一個局部變量,函數外無法訪問到
2、在函數內變量聲明前使用return關鍵字。
function too(){ console.log(y+"*"); // undefined* y = 10; console.log(y+"**"); // 10** return; // 函數內return後的語句不會執行 console.log(y+"***"); var y = 2; console.log(y+"****") } too();
因為變量聲明提升,且函數內使用了return關鍵字,故函數內return後面的語句並不會執行。所以上述語句相當於
function too(){var y; console.log(y+"*"); // undefined* y = 10; console.log(y+"**"); // 10** } too();
3、控制語句內聲明變量(如for循環或if語句中)
(1)、for語句內聲明變量:
for(var i=0;i<5;i++){} console.log(i) // 5
運行後可以看出,for語句內聲明的變量,語句外仍然可以使用。
(2)、if語句內聲明變量:
if(100){ var x = 30; } console.log(x) // 30
運行後,可以看出,在if語句內聲明的變量在if語句外仍然可以使用。
(3)、在if語句內聲明一個與外部同名的變量:
var x = 123; if(100){ var x = 30; } console.log(x) // 30
運行後,可以看出if語句內的變量會覆蓋if語句外聲明的變量。
JavaScript變量聲明與提升