Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript设置超时问题w/for循环_Javascript_Loops_For Loop_Settimeout - Fatal编程技术网

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;i
i
在调用匿名函数时为“
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做什么-我无法让代码标记在注释中工作-我最终会找到答案的