Javascript闭包和setTImeInterval函数

时间:2013-11-06 10:24:49

标签: javascript

<!DOCTYPE html>
<html>
<body>

<script>
function sampleDelay(delay) {
  return function(functionArray) {
    var count = 0;
    var func = setInterval(function(){
    if(count === functionArray.length){
      clearInterval(func);  
    }
          count++;
    console.log(functionArray[count-1]);
      return functionArray[count-1];        
    }, delay);

  };
}


var DelayedValue = sampleDelay(1000)([
  1,2,3,4,5
]);
</script>

</body>
</html> 

我想在延迟一秒后将DelayedValue varibale的值设为1,2,3,4,5。 此代码不返回DelayedValue变量的值。

请建议我做错了什么?

1 个答案:

答案 0 :(得分:1)

这是因为您通过引入间隔使您的代码异步。在间隔仍在运行时,您的功能已经完成执行。你需要使用回调和/或承诺来解决这个问题。

你可以这样做,例如(fiddle):

function delayedOutput(values, delay, callback){
    var step = 0,
        interval = setInterval(function(){
            callback(values[step++]);

            if(step === values.length){
                clearInterval(interval);
            }
    }, delay); 
}

delayedOutput([1,2,3,4,5], 1000, function(i){
    document.getElementById('output').innerHTML += i;
});