Javascript提升只考虑范围中的第一个变量吗?

时间:2015-06-26 18:23:02

标签: javascript hoisting

在以下JavaScript代码中,saySomething()会写“Hello there!”但不是“你好!”。这是否表明吊装仅适用于范围内的第一个变量?

var whatToSay = 'Hello World!';

function saySomething() {
  if (!whatToSay) {
    var whatToSay = 'Hello there!';
  }  
  document.write(whatToSay);
  var whatToSay = 'Hello you!';
}

saySomething();

以下是JS Bin http://jsbin.com/fiyimefeso/1/edit?js,output

的链接

1 个答案:

答案 0 :(得分:2)

不。提升意味着var 声明在代码执行之前发生。 Var 赋值在代码执行期间发生。提升时,所有变量都有undefined个值。

此处的证明:http://jsbin.com/xezamexama/edit?js,output

添加类型检查以进行比较,它会按预期打印undefined而不是"Hello you!"