You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:使用回调函数实现数组元素延迟/重复打印的问题

修复数组元素每隔2秒逐个打印的问题

咱们先聊聊你代码里的问题:你现在的setTimeout只做了一次2秒延迟,之后执行的typing函数里用了同步的for循环——这就导致等2秒后,循环会瞬间把所有元素都打印出来,完全没达到逐个间隔的效果。

下面给你两种可行的修复方案:

方案一:递归调用(直观易理解)

这种方法每次打印一个元素,然后延迟2秒再调用自身处理下一个,直到所有元素都打印完毕:

var words = ["horse","pig","fish","lion"];
var currentIndex = 0;

function printNextWord() {
  // 终止条件:所有元素都处理完就停止
  if (currentIndex >= words.length) return;
  
  // 打印当前元素(加<br>是为了换行,方便区分每个元素)
  document.write(words[currentIndex] + "<br>");
  currentIndex++;
  
  // 2秒后继续打印下一个
  setTimeout(printNextWord, 2000);
}

// 启动打印流程
printNextWord();

方案二:利用forEach和索引计算延迟

这种方法通过元素的索引来计算每个元素的延迟时间,第一个元素延迟0秒(立刻打印),第二个延迟2秒,第三个4秒,以此类推:

var words = ["horse","pig","fish","lion"];

words.forEach(function(word, index) {
  // 每个元素的延迟时间 = 索引值 * 2000毫秒
  setTimeout(function() {
    document.write(word + "<br>");
  }, index * 2000);
});

为什么原来的代码不行?

再回头看你的原代码:

var words = ["horse","pig","fish","lion"]
var time
function display(callback){
 time = setTimeout(typing, 2000);
}
function typing(){
 for (var i=0; i<words.length; i++)
 document.write(words[i])
}
display(typing);

这里的setTimeout只是让typing函数在2秒后执行,但typing里的for循环是同步执行的——它会在一瞬间把所有words数组里的元素都打印出来,所以你看到的就是等2秒后一次性输出所有内容。

内容的提问来源于stack exchange,提问作者Chris A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:57:21