我有跟随我遇到的javascript。我不了解代码执行的流程。
var val = 'ap';
function func() {
if (!val) {
var val = 'ple';
}
console.log(val);
}
func();
console.log(val);
我认为的输出是,' ap'然后' ap'。 但我得到了'然后' ap'。 这是怎么回事?
答案 0 :(得分:3)
以下行中的变量val
var val = 'ple'
正被提升到该功能的顶部。
val
s(函数内部)值为undefined
falsey ,这就是if
条件成功的原因,因为!false
是true
,因此1>} 里面的<{em>>函数设置为val
。它看起来大致像
'ple'
请记住,javascript中的范围不是块范围。相反,你要做的是设置已经声明的function func()
var val; // val = undefined
if(!val) { // it's still undefined and !undefined is true
val = 'ple'; // so this code executes
}
console.log(val); // 'ple'
}
val
答案 1 :(得分:0)
Javascript具有功能范围而不是阻止范围,直到我们在ES6中获得let语句...