美好的一天。
我有这个简单的代码:
totalTextArray = textForChatWithSeparators.split("#");
$.each(totalTextArray, function( index, value ) {
setTimeout(function(){console.log( value )},1000);
});
我希望在控制台日志中看到每一秒都记录“value
”,但是在1秒的延迟之后,我看到所有日志都在一个块中出现。
我做错了什么?我在想这个函数内部的函数可能会导致一些缓冲问题吗?
答案 0 :(得分:4)
你正在做的是
setTimeout
n 次1000
ms一起如果您不想更改结构,则需要做的是增加每次迭代的超时值,例如
setTimeout(function(){ console.log( value ) },1000*index);
一个可能更优雅(也更正确的方式imo),就是一起改变循环的结构。使用像
这样的间隔计时器(function _loop( elem ) {
console.log( elem );
if( totalTextArray.length ) {
setTimeout( _loop.bind( null, totalTextArray.shift() ), 1000 );
}
}());
答案 1 :(得分:1)
您需要的只是closure
:
totalTextArray = textForChatWithSeparators.split("#");
$.each(totalTextArray, function(value, index) {
setTimeout(function() {
console.log(value);
}, 1000 * (index + 1));
});
编辑:
我添加了有关closure
的更多链接: