首页 > 解决方案 > 变量声明是否提升到 if 范围块的顶部?

问题描述

当在 if 块范围内使用关键字 var 声明的变量发生提升时,( var x;) 是否提升到当前 if 块的顶部?或在这种情况下到全局范围的顶部?假设我们直接在全局范围内写了下面这段代码

if (true) {
   some code;
   var x = 1;
}

标签: javascript

解决方案


根据您的示例使用var(或完全省略定义键,例如 just x = 1)时,它将被提升到最近的范围,在您的示例中将是全局范围(window)。

如果它将被包装在一个函数中,那么该函数将是最接近的范围。

function a() {
    if(true){
       var x=1;
    }
    console.log(x) // 1
    console.log(window.x) // undefined
}
a()
console.log(x) // Throws error (x is not defined)

如果您希望变量完全是块范围,那么您需要使用letor const

if(true){
    const x=1;
}
console.log(x) // Throws error (x is not defined)


推荐阅读