Javascript java脚本Foreach循环
JavascriptJavascript java脚本Foreach循环,javascript,loops,foreach,Javascript,Loops,Foreach,Javascript function myFunction() { for (i = 0; i < 5000;) { setTimeout(function() { document.getElementById("demo").innerHTML = i; }, i); i += 500; } } 函数myFunction(){ 对于(i=0;i
function myFunction() {
for (i = 0; i < 5000;) {
setTimeout(function() {
document.getElementById("demo").innerHTML = i;
}, i);
i += 500;
}
}
函数myFunction(){
对于(i=0;i<5000;){
setTimeout(函数(){
document.getElementById(“demo”).innerHTML=i;
},i);
i+=500;
}
}
HTML
<body onload="myFunction()">
<div id="demo"></div>
如何每5毫秒增加一次“i”,并在每次更改时在演示中打印它
我正在尝试每5毫秒增加一次(I)的值,并在演示中打印出来
现在,由于某种原因,只要我运行脚本,值5000就会立即打印出来,而不是每次增加500
提前谢谢 您可以将
myFunction
更改为:
var i = 0;
function myFunction() {
var timerId = setInterval(function(){
if(i >= 5000)
{
clearInterval(timerId);
}
document.getElementById("demo").innerHTML = i;
i +=500;
}, 5);
}
这应该行得通
var i=0;
function looper(){
setTimeout(function(){
console.log(i+" data");
i=i+500;
if(i<5000)
looper();
}, i);
}
looper();
var i=0;
函数活套(){
setTimeout(函数(){
console.log(i+“数据”);
i=i+500;
如果(i)
Plunkr:您遇到了闭包未保存超时引用的问题。第二个参数之后的后续参数将作为参数传递到回调函数中
这里我们传递i
作为第三个参数
setTimeout(fn, delay, i)
然后在callaback中,我们可以访问i
,我们将其重新分配到回调范围内的x
函数myFunction(){
对于(i=0;i如果您希望您的代码看起来与现有代码相似,可以使用iLife:
函数myFunction(){
对于(i=0;i**
函数myFunction(){
var i=0;
var setClock=函数(){
如果(i<5000){
局部=i;
i+=500;
setTimeout(function(){document.getElementById(“demo”).innerHTML=local;setTimeout(setClock,500);},
500);
}
}
设置时钟();
}
**
您应该将脚本包装在标记中
javascript闭包。您应该知道,由于闭包,所有setTimeout()的第二个参数都是5000,这是i的最终值。您可以通过我显示的代码避免闭包,或者通过以下代码消除闭包的影响:
函数myFunction(){
局部变量;
对于(i=0;i<5000;i+=500){
局部=i;
setTimeout((函数(间隔){
返回函数(){document.getElementById(“demo”).innerHTML=interval;};
})(局部),(函数(区间){返回区间}(局部));
}
}
你的代码不清晰谢谢,我现在已经修复了。还有更好的吗?谢谢你的帮助,每个人都没有在每次我增加时打印出来:(如何停止循环?对于foreach,我可以说I>=5000@markif(i<5000){looper();}
,在setTimeout
内部。但这个答案不正确。超时是i
,应该是5ms。增量是5
,应该是500
。并且没有条件像上面所说的那样停止循环。@Arg0n谢谢,我已经更新了它。&yes mark在方法调用自身的地方设置了任何条件,根据您的需要。谢谢您的帮助:)刚发现这实际上并不是在i值增加500毫秒时打印出i值。它只是打印x值,这是iI的一个独立计时器。我不明白你的意思。你想实现什么?谢谢你的帮助,但我需要每500毫秒增加一次类似的值。我现在得到了答案:)谢谢again@mark然后你可能应该将你的问题中的如何每5毫秒增加一次“i”
改为如何每500毫秒增加一次“i”
。我已经更新了答案。事实上,答案在你的问题中有两处。…每5毫秒(i)一次的值…
。
setTimeout(fn, delay, i)
<div id="demo"></div>
<script>
function myFunction() {
var i = 0;
var setClock = function() {
if (i < 5000) {
local = i;
i += 500;
setTimeout(function() {document.getElementById("demo").innerHTML = local; setTimeout(setClock, 500);},
500);
}
}
setClock();
}
<div id="demo"></div>
<script>
function myFunction() {
var local;
for (i = 0; i < 5000; i+= 500) {
local = i;
setTimeout((function(interval){
return function() {document.getElementById("demo").innerHTML = interval;} ;
})(local), (function(interval){return interval})(local));
}
}