Javascript 如何使setInterval暂停它所在的循环?

Javascript 如何使setInterval暂停它所在的循环?,javascript,Javascript,JavaScript: var quotes = new Array(); quotes[0] = "message 0"; quotes[1] = "message 1"; var qText = document.getElementById('qText'); for (i = 0; i < quotes.length; i++) { setInterval(function() { qText.innerHTML = quotes[i]; }, 2000); }​ va

JavaScript:

var quotes = new Array();
quotes[0] = "message 0";
quotes[1] = "message 1";

var qText = document.getElementById('qText');
for (i = 0; i < quotes.length; i++) {
    setInterval(function() { qText.innerHTML = quotes[i]; }, 2000);
}​
var quotes=new Array();
引号[0]=“消息0”;
引号[1]=“消息1”;
var qText=document.getElementById('qText');
对于(i=0;i
HTML:

预定义文本


qText
innerHTML
更改为未定义,而不是更改为
quotes[0]
,后跟
quotes1
。现在我试着调试它,在setInterval函数中使用
alert()
来给我for循环的索引,它两次都说“2”。那么,我如何让for循环暂停,而不是setInterval创建新线程并增加索引?

您需要一种完全不同的方法:

var quotes = ["message 0", "message 1"];
var qText = document.getElementById('qText');
var i = 0;

var update = function() {
    qText.innerHTML = quotes[i++ % quotes.length];
};

update();
setInterval(update, 2000);

我想这是你想要的,不是一个循环

var quotes = ["message 0", "message 1"];
var qText = document.getElementById('qText');
var i = 0;
var len = quotes.length;

setInterval(function() {
   qText.innerHTML = quotes[i++];
   if (i === len) i = 0; 
}, 2000);

您可以通过调用setInterval来强制将正确的变量传递给函数,setInterval包含可传递给函数的参数列表(在JSFIDLE上测试)


setInterval已经在创建一个循环,它的所有迭代将在每n毫秒后运行,在您的例子中是2000。如果在循环中调用setInterval,则其内容将每隔n毫秒运行一次。你只要打一次电话就行了。请注意,Javascript在浏览器中不是多线程的。

引号[i]存在关闭问题,不能暂停循环。使用
console.log()代替警报因为它的输出更灵活。(控制台日志输出到firebug,或您在浏览器中使用的任何控制台)可能重复的@xdazz:The
%quotes.length
解决了这个问题:)嘿,我能解释一下否决票的原因吗,不管是谁?
var quotes = ["message 0", "message 1"];
var qText = document.getElementById('qText');
var i = 0;
var len = quotes.length;

setInterval(function() {
   qText.innerHTML = quotes[i++];
   if (i === len) i = 0; 
}, 2000);
setInterval(function(q) { qText.innerHTML = q; }, 2000, quotes[i]);