尽管我知道let
允许您声明仅限于块作用域的变量,但在使用它与JavaScript闭包时,我遇到了一个奇怪的let
和var
之间的区别。 这是我的例子:
使用let
:
function buildFunction() {
var arr = [];
for(var i = 0; i < 3; i++) {
let j = i; //Using let to assign j
arr.push(
function(){
console.log(j);
}
)
}
return arr;
}
var fs = buildFunction();
fs[0]();
fs[1]();
fs[2]();
0
1
2
使用 var
:
function buildFunction() {
var arr = [];
for(var i = 0; i < 3; i++) {
var j = i; //Using var to assign j
arr.push(
function(){
console.log(j);
}
)
}
return arr;
}
var fs = buildFunction();
fs[0]();
fs[1]();
fs[2]();
2
2
2
我的问题是:
如果我在块内使用
var
并在执行期间给它赋值,那么它不应该像 let 一样在内存中存储不同的副本吗?Javascript 在闭包中是否以不同方式处理
let
和var
?
非常感谢任何关于此的澄清。