【发布时间】:2014-10-09 22:19:48
【问题描述】:
我正在尝试理解 JS 中的作用域。这里我有一个示例,它在全局范围内有一个名为 check 的变量。它有一个真实的值,我的意思是 1。然后在一个名为 main 的函数中 @ 987654325@ 但有一个if statement 用于检查是否存在检查变量,然后将另一个值重新分配给检查变量。然后打印出来。如果我使用
if(check){}
它打印未定义。我有一些问题:
1. 检查变量是在全局范围内声明的。这意味着它可以在任何地方访问。那么即使IF statement 失败,它也应该打印全局分配的值,即 1 而不是 undefined。为什么它打印 undefined 而不是 1??
2.主函数作用域没有检查变量。如果在主函数作用域内找不到检查,为什么不在全局作用域中查找??
(function(){
var check=1;
function main(){
if(check){
var check=10;
}
document.write(check);
}
main();
})();
【问题讨论】:
-
因为它在到达全局范围之前发现了一个
check变量。 -
它没有找到支票。它正在打印未定义。
-
您在执行
var check=10时将其设置为未定义。 :) 我相信答案很快就会解释。这是一个很常见的问题。 -
你能再具体一点吗???
-
试试这个以进一步阅读该主题:sitepoint.com/back-to-basics-javascript-hoisting
标签: javascript scoping