2014-12-30 75 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