1. 程式人生 > >JavaScript變量聲明與提升

JavaScript變量聲明與提升

聲明變量 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變量聲明與提升