Javascript 提升是否只考虑作用域中的第一个变量?

Does Javascript hoisting only consider the first var in a scope?

在下面的 JavaScript 代码中,saySomething() 写入 "Hello there!" 而不是 "Hello you!"。这是否表明提升仅适用于范围内的第一个变量?

var whatToSay = 'Hello World!';

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

saySomething();

这里有一个link到JS Binhttp://jsbin.com/fiyimefeso/1/edit?js,output

没有。提升意味着 var declarations 发生在代码执行之前。 Var assignments 在代码执行期间发生。提升后,所有变量都有 undefined 个值。

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

在比较中添加类型检查,它将打印 undefined 而不是您预期的 "Hello you!"