我有代码段:

var i = 0;

(function loop() {
    text_objects[i].displayText();
    if (++i < text_objects.length) {
        setTimeout(loop, 3000);
    }
})();


它应该一次显示一个数组的内容,间隔3秒。但是,当我运行程序时,我只得到第一个项目,而它只是冻结在那里,而没有更新和显示数组中的其余项目。

我究竟做错了什么?

最佳答案

正如@nnnnnn正确提到的,


  loop()是一个命名函数表达式,引用循环应在函数范围内


您的代码也可以正常工作。



var i = 0;

var test = function(value){
  this.text = value;
}

test.prototype.displayText = function(){
  document.write(this.text + "<br/>");
}

var text_objects = [];

for (var j = 0; j<10; j++){ text_objects.push(new test(j)); }

(function loop() {
    text_objects[i].displayText();
    if (++i < text_objects.length) {
        setTimeout(loop, 3000);
    }
})();





替代方法:



var i = 0;

function loop() {
    document.write(i + "<br/>")
    if (++i < 5) {
        setTimeout(loop, 3000);
    }
}

loop();

关于javascript - JavaScript:一次3秒后显示阵列项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35715620/

10-15 06:53