
有一次提交project时,被提示 don’t make functions with a loop ,查了些资料后才明白。
function count(max) {
for(var i=0; i< max; i += 1) {
console.log(i+1);
}
}
count(10);
上面的代码可以正常输入 1 到 10 。
function count(max) {
for(var i=0; i< max; i += 1) {
setTimeout(function() {
console.log(i+1);
}, 1000);
}
}
count(10);
但上面的代码就会输出10个11 。
当看到输出结果时,想想就明白原因了,因为等到 1 秒后再去输出时,i 的值已经变成 10 了。
function count(max) {
for(var i=0; i< max; i += 1) {
printLater(i+1);
}
}
function printLater(output) {
setTimeout(function() {
console.log(i+1);
}, 1000);
}
count(10);
就因为容易出现这样的问题,所以不能在 loop 里 make functions 。




近期评论