Javascript设置超时问题w/for循环
这是我的函数,当调用时,相关节点变为红色,然后什么也不做。Javascript设置超时问题w/for循环,javascript,loops,for-loop,settimeout,Javascript,Loops,For Loop,Settimeout,这是我的函数,当调用时,相关节点变为红色,然后什么也不做。 下面是javascript: function blink (node, flickers) { originalColour = node.style.color; for (i = 1; i <= (flickers*2); i++) { setTimeout (function () {ChangeColor (node, (((i%2) == 0) ? (originalCo
下面是javascript:
function blink (node, flickers)
{
originalColour = node.style.color;
for (i = 1; i <= (flickers*2); i++)
{
setTimeout (function () {ChangeColor (node, (((i%2) == 0) ? (originalColour) : ('red')))}, (i*200));
}
}
function ChangeColor (node, color)
{
node.style.color = color;
}
功能闪烁(节点闪烁)
{
OriginalColor=node.style.color;
对于(i=1;ii
在调用匿名函数时为“i
”,在调用setTimeout
时为“not”i
)
您需要创建一个闭包并将当前值i
传递给它
function ChangeColorLater(i) {
return function () {
ChangeColor (node, (((i%2) == 0) ? (originalColour) : ('red')))
}
}
setTimeout (ChangeColourLater(i), (i*200));
i
在调用匿名函数时为“i
”,而在调用setTimeout
时为“not”i
您需要创建一个闭包并将当前值i
传递给它
function ChangeColorLater(i) {
return function () {
ChangeColor (node, (((i%2) == 0) ? (originalColour) : ('red')))
}
}
setTimeout (ChangeColourLater(i), (i*200));
问题是在每次超时执行时,i等于闪烁*2
使用闭包,可以在设置超时时捕获i的值,并将其传递给ChangeColor函数。在执行回调时,索引(下面)将等于设置超时时i的值
你想要的是:
function blink (node, flickers) {
var originalColour = node.style.color;
for (var i = 1; i <= (flickers*2); i++) {
setTimeout (function (index) { // current value for i in loop becomes var index
return function() {
ChangeColor(node, (index % 2 == 0) ? originalColour : 'red');
}
}(i), i*200)
}
}
function ChangeColor (node, color) {
node.style.color = color;
}
功能闪烁(节点闪烁){
var originalColour=node.style.color;
对于(var i=1;i而言,问题在于在执行每个超时时,i等于闪烁*2
使用闭包,可以在设置超时时捕获i的值,并将其传递给ChangeColor函数。在执行回调时,索引(下面)将等于设置超时时i的值
你想要的是:
function blink (node, flickers) {
var originalColour = node.style.color;
for (var i = 1; i <= (flickers*2); i++) {
setTimeout (function (index) { // current value for i in loop becomes var index
return function() {
ChangeColor(node, (index % 2 == 0) ? originalColour : 'red');
}
}(i), i*200)
}
}
function ChangeColor (node, color) {
node.style.color = color;
}
功能闪烁(节点闪烁){
var originalColour=node.style.color;
对于(var i=1;i而言,更易于阅读
读起来容易一点
我真的很抱歉,这就是您的意思:函数blink(node,flickes){alert('start');originalColour=node.style.color;for(i=1;对不起,我不知道我在用stackoverflow做什么-我不能让代码标记在注释中工作-我最终会弄明白的。我真的很抱歉,这就是你的意思:函数blink(节点,闪烁){alert('start');originalColour=node.style.color;for(i=1;对不起,我不知道我在用stackoverflow做什么-我无法让代码标记在注释中工作-我最终会找到答案的