JS循环内定时调用函数的实现方法
错误写法:
1 2 3 4 5 |
for (var i=1; i<=5; i++) { setTimeout( function timer() { console.log(i); }, i*1000 ); } |
如果我们直接这样写,根据setTimeout定义的操作在函数调用栈清空之后才会执行的特点,for循环里定义了5个setTimeout操作。而当这些操作开始执行时,for循环的i值,已经先一步变成了6。因此输出结果总为6。
正确写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
for (var i=1; i<=5; i++) { setTimeout( (function(i) { return function() { console.log(i); } })(i), i*1000 ); } ////////////或者////////// for (var i=1; i<=5; i++) { (function(i) { setTimeout( function timer() { console.log(i); }, i*1000 ); })(i) } |