7

作为学习 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 浏览器,如果这有什么不同的话。

所以,我的问题是,为什么函数中提升的局部变量返回未定义,而提升的全局变量返回空白?

4

1 回答 1

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();

于 2014-12-30T22:26:54.203 回答