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!"
。
在下面的 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!"
。