【发布时间】:2015-06-26 18:23:01
【问题描述】:
在以下 JavaScript 代码中,saySomething() 写入“Hello there!”但不是“你好!”。这是否表明提升仅适用于范围内的第一个 var?
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的链接
【问题讨论】:
-
这可能会帮助你理解:stackoverflow.com/questions/7506844/…
-
@NormanBreau 谢谢你,但该链接无法帮助我了解为什么
var whatToSay = 'Hello there!'优先于var whatToSay = 'Hello you!'。 -
提升只创建一个变量,不做赋值。
-
JavaScript 只提升声明,而不是初始化。
-
它没有“优先”,只是碰巧在 write 之前的变量值是“Hello there”。正如dansasu所说,它的价值与声明无关。它不会神奇地抓取最后一个赋值并将其用于整个函数,而只是“Hello there”是使用前最后一个保持的值
标签: javascript hoisting