【发布时间】:2017-04-05 16:37:46
【问题描述】:
谁能解释为什么下面产生 1,2 而另一个产生 5?他们不应该都产生5吗?
//produces 1,2
(function () {
var a = [5];
function bar() {
if (!a) {
var a = [1, 2];
}
console.log(a.join());
}
bar();
})();
根据阅读了一些关于 JS 闭包的文章,我希望它们都产生 5。似乎无法在任何地方找到一篇文章来解释为什么第一个块会产生其他情况。
//produces 5
(function () {
var a = [5];
function bar() {
if (a) {
console.log(a.join());
}
else {
console.log([1, 2].join())
}
}
bar();
})();
谢谢!
【问题讨论】:
-
您可以避免此类问题,并且不必担心提升,只需按照最佳实践要求在函数顶部声明变量即可。
-
@torazaburo 我听说了,但你能提供一个来源吗?
-
@jkris 你可以从这里开始:javascript.crockford.com/code.html#variable%20declarations
-
@torazaburo Crockford,很好!谢谢!
标签: javascript scope closures lexical-closures