for(var i = 0; i < 100; i++){
var foo = 5;
}
它可以工作......但这样做有什么不好吗?
我知道我可以在外面声明var foo
,但是既然我只会在循环中使用它,为什么要那样做呢?
for(var i = 0; i < 100; i++){
var foo = 5;
}
它可以工作......但这样做有什么不好吗?
我知道我可以在外面声明var foo
,但是既然我只会在循环中使用它,为什么要那样做呢?
这是不好的,因为它会给人错误的印象,认为i
和foo
是本地变量。
for(var i = 0; i < 100; i++){
var foo = 5;
}
foo; // 5
这可能不是简单代码的问题,但如果您使用闭包,则会发现只有一个foo
:
var counters = [];
for (var i = 0; i < 100; i++) {
var foo = 5;
counters.push(function() { foo++; return foo; });
}
counters[0](); // 6
counters[0](); // 7
counters[1](); // 8 (!)
foo
,需要引入一个函数:var counters = [];
for (var i = 0; i < 100; i++) {
(function() {
var foo = 5;
counters.push(function() { foo++; return foo; });
})();
}
counters[0](); // 6
counters[0](); // 7
counters[1](); // 6
let
关键字(参见MDN)创建真正的本地变量。
a = "外部"; function f () { a = "内部1"; return a; var a = "内部2" }; alert(f() + " " + a)
(这样可以确保在读取变量a
之前先执行函数f()
)。 - user2246674let
来创建块级作用域,否则请继续使用var
。 - PSL