Java脚本作用域

时间:2018-06-19 23:26:46

标签: javascript

Js社区我是JS的新手,在这个示例中我对JS范围感到困惑。我有一个if语句,并且在block var age内定义了这个本地范围,然后我用控制台记录了这个可变年龄,我得到了25这就是为什么?是因为if语句是全局定义的,所以在块内定义的也是全局的吗?我注意到年龄变量附加到全局对象上,这是我登录它的窗口,我发现了年龄var,但是我不确定为什么会这样吗?

if(true){
    var age = 25;
}

console.log(age);

2 个答案:

答案 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

More information and what it does to function decleration

答案 1 :(得分:0)

如果我正确理解这是由于一种称为提升的概念,则将变量声明移到当前函数作用域的顶部,而不是块作用域的顶部。

https://developer.mozilla.org/en-US/docs/Glossary/Hoisting