作为我学习JavaScript的一部分,我尝试编写代码来演示我正在学习的概念;今天我学习了悬挂变量。这是我写的代码:
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 :(得分: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();