我试图理解JS中的作用域。我有一个例子,它在全局范围内有一个名为check
的变量。它有一个真值,我的意思是1
。然后在一个名为{的函数内部{1}} main
但doesn't have a variable called check
检查是否存在检查变量,然后重新分配另一个值以检查变量。然后打印出来。如果我使用
if statement
它打印未定义。这里我有一些问题:
1。检查变量是在全局范围内声明的。这意味着它可以随处访问。即使if(check){}
失败,它也应该打印全局赋值的值,而不是未定义的值。为什么它打印undefined而不是1 ??
2。主要功能范围没有检查变量。如果在主要功能的范围内找不到检查,为什么它不能找到它在全球范围内?
IF statement

答案 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将查找它可以找到的最本地变量的链。基本上,本地范围胜过全球范围。
这是全球范围内潜在的陷阱之一,也是应该避免的原因之一,因为它会与局部变量产生冲突。