我遇到了这个关于功能范围与块范围的示例代码片段,但我不确定它是如何工作的:
(function () {
if (true) {
var x = true;
console.log("Is 'x' available inside the block? " + x);
}
console.log("Is 'x' available outside the block? " + x);
})();
最初,我认为条件是检查声明的变量 x 的值是否为真,并且变量提升的 b/c 可以将条件缩写为 'if(true)' 而不是 'if(x ==真)'。
但是,如果您更改 x 的值以使 x=false,则条件中的代码块仍会执行,并且会触发两个控制台日志,其中 x 的值为“false”。它不应该只执行条件语句之外的控制台日志吗?
如果 x=true,并且条件更改为 'if(false)',则仅执行条件之外的控制台日志,但是.. x 的值未定义。如果变量具有功能范围并且被提升,那么外部控制台日志是否应该执行并且 x=false 的值?
谢谢!