2016-03-27 76 views
4

我知道變量的提升是在Java Script中完成的。我無法明白爲什麼它輸出爲未定義JavaScript中的提升變量

do_something() 
    { 
    var foo = 2;  
    console.log(foo); 
    } do_something() // it prints 2 

do_something() 
    {   
    console.log(foo); var foo = 2; 
    } do_something() // it prints undefined 

如JavaScript做吊裝第二功能也應該打印2按我的understand.buy爲什麼沒有

回答

1

只有申報權被吊銷。分配的變量不會被掛起。所以你是

4

這是怎麼解釋你看到代碼,

do_something() { 
var foo; 
console.log(foo); // undefined 
foo = 2; 
} 

do_something(); 

所以它打印undefined。這是可變吊裝的基礎。你的聲明將被移到最上面,你的分配將保持在同一個地方。當您使用let而不是var時,情況會有所不同。

2

Javascript只提升聲明,而不是初始化。

var x = y, y = 'A'; 
console.log(x + y); // undefinedA 

這裏,x和y是在任何代碼執行之前聲明的,分配會在稍後發生。當時​​3210被評估,y存在,因此沒有ReferenceError被拋出,其值爲'undefined'。所以,x被分配了未定義的值。然後,y被賦值爲'A'。因此,第一行後,x === undefined && y === 'A',因此,結果。

Variable Declaration

0

第二個功能輸出undefined因爲您設置的變量以後你就叫吧。你寫的代碼是同步的,這意味着它由行解釋器逐行讀取,按順序執行。如果在調用變量之前未定義變量,則控制檯輸出undefined

This article explains it in more detail.

0

只有聲明懸掛,任何變量賦值總是會留在其最初是從。