2014-12-30 107 views
7

作爲我學習JavaScript的一部分,我嘗試編寫代碼來展示我正在學習的概念;今天我正在學習升降變量。這是我寫的代碼:爲什麼我的JavaScript提升局部變量返回undefined,但懸掛的全局變量返回空白?

console.log("A: My name is " + name); 

function happy() { 
    console.log ("1: I am " + feeling); 
    var feeling = "happy"; 
    console.log ("2: I am " + feeling); 
} 
happy(); 

var name = "Jim"; 
console.log("B: My name is " + name); 

我預期的結果如下:

A: My name is undefined 
1: I am undefined 
2: I am happy 
B: My name is Jim 

然而,在WriteCodeOnline.com而在另一個沙盒測試我的代碼的時候,第一的console.log顯示A: My name is。我使用的是Chrome瀏覽器,如果這有所幫助。

所以,我的問題是,爲什麼當懸掛的全局變量返回一個空白時,函數內的懸掛局部變量返回undefined?

+0

它似乎存在另一個問題回答我的問題。如果我知道我的問題的答案,我可能也會找到其他問題。如果這個問題關閉,我沒有問題。 – JimLockwood

回答

7

這裏發生了什麼事您正在訪問window.name

這是window的預定義屬性,因此您懸掛的var name實際上並未創建新變量。在全局範圍內已經有一個名稱,默認情況下,它有一個空白字符串值。

觀察您所期望的行爲,您可以使用其他變量名比name,或者把你的代碼在函數內部:

function hoisting() { 
 
    console.log("A: My name is " + name); 
 

 
    function happy() { 
 
    console.log ("1: I am " + feeling); 
 
    var feeling = "happy"; 
 
    console.log ("2: I am " + feeling); 
 
    } 
 
    happy(); 
 

 
    var name = "Jim"; 
 
    console.log("B: My name is " + name); 
 
} 
 

 
hoisting();

+0

好吧,很高興知道我的期望是正確的。現在回到學習中,關鍵字等不能用作變量名稱。 – JimLockwood

+2

@JimLockwood這裏重要的東西是讓你的標識符超出全局範圍。 :) – JLRishe

+1

@RobG你不是指在窗口中的''名稱? – fgb