【发布时间】:2014-03-28 03:18:40
【问题描述】:
我在研究JS中变量作用域的概念,在上面找到了这个例子:
(function() {
var foo = 1;
function bar() {
var foo = 2;
}
bar();
console.log(foo) //outputs 1
if(true) {
var foo = 3;
}
console.log(foo) //outputs 3
})();
这个函数的输出是
1
3
现在我很困惑foo 如何在第二个日志中获得值 3。即使在if 语句中使用var 声明了foo。在if 中声明的foo 不应该在bar() 中拥有一个新实例吗??
【问题讨论】:
-
JavaScript 具有函数级范围,而不是块级范围。
if中的var与var foo的计算方式相同。 -
很好奇为什么投反对票的人投反对票。这不是一个坏问题。可能会重复,但还不错。有些问题既值得反对,也值得一票。但是之前提出的好问题应该标记为重复。之前提出的重要问题应标记为重复并赞成!这个问题有一个清晰简洁的代码示例以及一个清晰的问题。这是一个很好的问题,尽管是重复的。链接的副本不是很好:它缺少代码示例并提出多个问题。也许它应该被关闭为“太宽泛”。 ;)
-
我同意,这是一个很好的重复问题。我会投票支持关闭。
标签: javascript