Js社区我是JS的新手,在这个示例中我对JS范围感到困惑。我有一个if语句,并且在block var age内定义了这个本地范围,然后我用控制台记录了这个可变年龄,我得到了25这就是为什么?是因为if语句是全局定义的,所以在块内定义的也是全局的吗?我注意到年龄变量附加到全局对象上,这是我登录它的窗口,我发现了年龄var,但是我不确定为什么会这样吗?
if(true){
var age = 25;
}
console.log(age);
答案 0 :(得分:1)
您有一些误解应该解决:
var 提升到本地范围(评估之前)
console.log(a) // undefined
var a = 25
console.log(a) // 25
let 和 const 的词法范围:
{ // this is a block scope, and will only be a scope when evaluated since it is standalone
console.log(a) // reference error
let a = 25;
console.log(a) // 25
}
console.log(a) // reference error
显示语句块会发生什么
if (true) {
let a = 25;
}
console.log(a) // reference error
if 语句仅在计算结果为true时执行。 true 是真的。因此,您的 if 语句将始终在您的示例中触发,并将提升的变量设置为25。
console.log(a) // undefined since a got hoisted to top of local scope, which is currently global
var a;
if (false) a = 25;
console.log(a) // undefined
if (true) a = 25;
console.log(a) // 25
答案 1 :(得分:0)
如果我正确理解这是由于一种称为提升的概念,则将变量声明移到当前函数作用域的顶部,而不是块作用域的顶部。