没有调用setTimeout(?)

时间:2010-12-27 02:11:20

标签: javascript settimeout

问题是我的数组是[[] [] []]而不是[[]]:/

这是我的剧本

function loopobject(array) {
    var me = this;
    this.array = array;
    this.loop = function() {
        counter = 0;
        while(array.length > counter) {
            window[array[counter]]('arg1', 'arg2');
            counter++;
        }
        setTimeout(function(){ me.loop() }, 100);
    }
}

var loopinstant = new loopobject(array);
window.onload = loopinstant.loop();

第一次迭代后出现问题。我不知道究竟是什么问题,但我想知道它是否因为它是在一个对象内部,并且一旦重新创建了该函数,它就不记得该数组了吗?

2 个答案:

答案 0 :(得分:2)

不要将字符串传递给setTimeout

将字符串传递给setTimeout会使其在全局范围内eval 除了不必要的慢,这意味着它不会看到你的局部变量,包括loop变量。

相反,您应该将函数本身传递给setTimeout

setTimeout(function() { loop(array); }, 100);

此外,loopobject实际上没有loop属性,您可以稍后再调用 要创建属性,请将其更改为this.loop = function(...) { ... }

请注意,使用正确的setTimeout不会调用this回调 您还需要在本地变量中保存this的副本。

最后,您的window.onload代码将调用 loop,然后将结果分配给onload

纠正这些问题,您的代码变为

function loopobject(){
    var me = this;
    this.loop = function(array){
        counter = 0;
        while(array.length > counter){
            window[array[counter]]('arg1', 'arg2');
            counter++;
        }
        setTimeout(function() { me.loop(array); }, 100);
    };
}
var loopinstant = new loopobject();
window.onload = function() { loopinstant.loop(array); };

答案 1 :(得分:0)

替换

setTimeout("loop()", 100);

setTimeout(function() { loop(array); }, 100);