谁能解释为什么下面的产生 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。似乎找不到任何文章可以提供一些关于为什么第一个 block 产生其他结果的见解。
//produces 5
(function () {
var a = [5];
function bar() {
if (a) {
console.log(a.join());
}
else {
console.log([1, 2].join())
}
}
bar();
})();
谢谢!
最佳答案
由于 javascripts var hoisting ,这段代码:
(function () {
var a = [5];
function bar() {
if (!a) {
var a = [1, 2];
}
console.log(a.join());
}
bar();
})();
相当于这段代码:
(function () {
var a = [5];
function bar() {
var a; // a === undefined at this point
if (!a) {
a = [1, 2];
}
console.log(a.join());
}
bar();
})();
所以你可以看到,当测试 if 条件时,a
确实是 falsey
(即 !a === true)
关于javascript - 这些 block 的 JS 范围如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40734482/