JS 破坏性赋值 - 为什么它会这样工作?
JS destructive assignment - why does it work like this?
for (var i = 1; i < 5; i++) {
console.log(i);
setTimeout(function() {
console.log(i);
}, 3000)
};
首先,此代码显示从 1 到 4 的数字,三秒后 - 四五。这不是一个明显的行动顺序。
我想输出应该是这样的:
1 //pause 3s
1
2 //pause 3s
2
3 //pause 3s
3
4 //pause 3s
4
我需要了解有关 JS 解释器的哪些信息才能给出正确答案?
问题根本不是闭包
setTimeout 延迟函数调用,它不会让实际程序进入睡眠状态。这是一个异步方法,如果你想暂停你的应用程序 - 这样做:
for (var i = 1; i < 5; i++) {
console.log(i);
sleep(3000);
console.log(i);
};
你可以用你的索引来控制setTimeout
的时间:
for (var i = 0; i < 4; i++) {
setTimeout(function(ii) {
console.log(ii);
}.bind(0, i+1), i*1000)
};
for (var i = 1; i < 5; i++) {
console.log(i);
setTimeout(function() {
console.log(i);
}, 3000)
};
首先,此代码显示从 1 到 4 的数字,三秒后 - 四五。这不是一个明显的行动顺序。 我想输出应该是这样的:
1 //pause 3s
1
2 //pause 3s
2
3 //pause 3s
3
4 //pause 3s
4
我需要了解有关 JS 解释器的哪些信息才能给出正确答案? 问题根本不是闭包
setTimeout 延迟函数调用,它不会让实际程序进入睡眠状态。这是一个异步方法,如果你想暂停你的应用程序 - 这样做:
for (var i = 1; i < 5; i++) {
console.log(i);
sleep(3000);
console.log(i);
};
你可以用你的索引来控制setTimeout
的时间:
for (var i = 0; i < 4; i++) {
setTimeout(function(ii) {
console.log(ii);
}.bind(0, i+1), i*1000)
};