javascript - Javascript 提升是否只考虑作用域中的第一个 var?

标签 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 的链接

最佳答案

不。提升意味着 var 声明发生在代码执行之前。变量赋值发生在代码执行期间。提升后,所有变量都具有未定义值。

证明在这里:http://jsbin.com/xezamexama/edit?js,output

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

关于javascript - Javascript 提升是否只考虑作用域中的第一个 var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079756/

相关文章:

javascript - 为什么我的 javascript 代码返回 TypeError undefined?

javascript - 鼠标悬停时类更改不可见

javascript - 调用 Flux Store 操作时 setState 并未更新状态

javascript - 单击按钮刷新图表

javascript - Highcharts 溢出父容器

javascript - 如何在javascript中删除对象的一部分

javascript - 变量未提升

javascript - Function Expression 本身不能将 Name 赋值给另一个 Value

javascript - 变量未按预期在angularjs中提升

c# - 为什么 C# 中不存在提升?