为什么setTimeout函数似乎无法进入无限循环?

时间:2015-01-09 14:23:18

标签: jquery

setTimeout函数似乎无法进入无限循环: 下面我使用了setTimeout函数,但它返回的值没有任何所需的延迟。

来源:

var Slider = new function () {
    var that = this;
    for (var i = 1; i < 6; i++) {
        var a = myFunction(i);
        alert(a);
        if (i == 5) {
            i = 0;
        }
    }
};
 function myFunction(n) {
    setTimeout(function () {
        return n;
    }, 3000);
};

2 个答案:

答案 0 :(得分:1)

首先,您的return n调用将值返回到setTimeout回调。 myFunction并未返回任何内容。因此,您在a中获得的价值可以是任何东西。

其次,setTimeout在给定的超时后执行一段代码,但不会阻止当前的执行。这意味着您在致电alert(a)后会立即致电myFunction,然后在3秒后,将会执行setTimeout回调。

答案 1 :(得分:-1)

如果( - )是一个secont然后从函数myFunction返回输出

,它会正确地工作
    --- output
    --- output
    --- output
    --- output
    --- output

var Slider = new function () {
    var that = this;
    for (var i = 1; i < 6; i++) {
        var a = myFunction(i);

        if (i == 5) {
            i = 0;
        }
    }
};
function myFunction(n) {
    setTimeout(function () {
        alert(n);
    }, 3000);
};

如果您使用此代码,则可以清除

    --- output
    ------ output
    --------- output
    ------------ output
    --------------- output

    var Slider = new function () {
    var that = this;
    for (var i = 1; i < 6; i++) {
        var a = myFunction(i);

        //if (i == 5) {
        //    i = 0;
        //}
    }
};
function myFunction(n) {
    setTimeout(function () {
        alert(n);
    }, (n*3000));
};

我停止无限循环,它也适用于无限循环。