问题:请从1到10打印到控制台,每隔一秒打印一个数字。不要用全局变量和递归。
for(var i = 1;i < 11;++i) {
setTimeout(function(){
console.log(i);
},1000);
}
上面的代码,真正得到的并不是预期的效果,而是打印了10次11,而且是在几乎同时打印出来的(取决了执行一次for语句需要多长时间)。
原因:并不会等待执行完setTimeout,再进行下一次循环。
for(var i = 1;i < 11;++i) {
setTimeout(function(){
console.log(i);
},1000 * i);
}
效果:每秒钟打印一次11.
原因:调用setTimeout(fun, millisecond)
时,取i
是1到10;但是在执行setTimeout
时,console.log(i);
中的i
已经是11 了
function st(n){
setTimeout(function(){
console.log(n);
},1000 * n);
}
for(var i = 1;i < 11;++i) {
st(i);
}
效果:成功。每秒钟打印一次,从1到10
原因:这里用到了形参传值。