为什么我的JavaScript提升局部变量返回undefined但是提升的全局变量返回空白?

Jim*_*ood 7 javascript undefined hoisting

作为我学习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);   
Run Code Online (Sandbox Code Playgroud)

我期待以下结果:

A: My name is undefined
1: I am undefined
2: I am happy
B: My name is Jim
Run Code Online (Sandbox Code Playgroud)

但是,在WriteCodeOnline.com和另一个沙箱中测试我的代码时,会显示第一个console.log A: My name is.我使用的是Chrome浏览器,如果有所不同的话.

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

JLR*_*she 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();
Run Code Online (Sandbox Code Playgroud)

  • @JimLockwood这里的重要内容是使您的标识符不在全球范围内.:) (2认同)