为什么if语句不在全局范围内寻找变量

时间:2014-10-09 22:19:49

标签: javascript scoping

我试图理解JS中的作用域。我有一个例子,它在全局范围内有一个名为check的变量。它有一个真值,我的意思是1。然后在一个名为{的函数内部{1}} maindoesn't have a variable called check检查是否存在检查变量,然后重新分配另一个值以检查变量。然后打印出来。如果我使用

if statement

它打印未定义。这里我有一些问题

1。检查变量是在全局范围内声明的。这意味着它可以随处访问。即使if(check){} 失败,它也应该打印全局赋值的值,而不是未定义的值。为什么它打印undefined而不是1 ??

2。主要功能范围没有检查变量。如果在主要功能的范围内找不到检查,为什么它不能找到它在全球范围内?



IF statement




2 个答案:

答案 0 :(得分:4)

JavaScript只有功能范围和名为吊装的东西。函数内的每个变量声明都放在函数的开头。因此,您的代码等同于

var check=1;
function main(){
  var check; // = undefined
  if(check){ // block doesn't create scope
    check=10;
  }
  document.write(check);
}

局部变量check会遮蔽外部变量check

答案 1 :(得分:1)

JavaScript将查找它可以找到的最本地变量的链。基本上,本地范围胜过全球范围。

这是全球范围内潜在的陷阱之一,也是应该避免的原因之一,因为它会与局部变量产生冲突。