【发布时间】:2017-05-08 02:11:57
【问题描述】:
虽然我知道 let 允许您声明范围限制在块中的变量,但我遇到了 let 和 var 之间的奇怪区别strong> 同时将它与 javascript 闭包一起使用。这是我的例子:
用 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]();
上面的代码 sn -p 返回输出为: 0 1 2
带变量
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]();
上面的代码 sn -p 返回输出为: 2 2 2
我的问题是:
如果我在块中使用 var 并在执行期间为其分配一个值,它不应该完全像 let 一样工作并将 j 的不同副本存储在内存中吗?
javascript 在闭包中处理 let 和 var 的方式不同吗?
对此的任何澄清将不胜感激。
【问题讨论】:
-
@oen44:不,这不是重复的。请仔细阅读问题
-
我认为它回答了“如果我在块内使用 var,它不应该像 let 一样工作吗?”非常好。第二个问题(No)的答案就变得无关紧要了。
标签: javascript jquery