我正在学习在JS变量的作用域的概念,发现它这个例子:该功能的变量的作用域混乱的JavaScript
(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'的计数方式相同。 – Bergi
好奇为什么downvoters downvoting。这不是一个坏问题。也许重复,但不坏。有些问题值得赞同和接近的投票。但之前提出的好问题应该标记为重复。以前曾经问过的很多问题应该被标记为重复和** upvoted!**这个问题有一个清晰简洁的代码示例以及一个明确表达的问题。这是一个很好的问题,虽然是重复的。链接的副本不*很好:它缺少代码示例并提出了多个问题。也许它应该被封闭为“太宽泛”。 ;) – gilly3
我同意,这是一个很好的重复问题。然后,我会赞成并投票结束。 – chryss