setTimeout适用于Opera,但不适用于其他浏览器

时间:2011-04-23 19:50:26

标签: javascript browser settimeout

我用这个打了一个死胡同,已经抓了半天头。问题很奇怪,如果你想看看我的源代码:www.modwebsolutions.com/test2(警告:尚未优化,可能会锁定浏览器几秒钟)。问题是,setTimeout序列在Opera中正常工作,但在其他浏览器中只执行第一个,然后停止执行脚本。从我的代码中删除:

var a1=setTimeout(drawVertical([arguments]),1000);
var b1=setTimeout(drawVertical([arguments]),1000);
var c1=setTimeout(drawVertical([arguments]),1000);      
var d1=setTimeout(drawVertical([arguments)],1000);

尝试了所有内容,将函数括在引号中,寻找其他语法错误,没有任何帮助。奇怪的是,正如我所提到的 - 在Opera中一切正常。 更新:也适用于Chrome,这让它更加令人困惑......

UPDATE2:没有超时的相同示例,工作得很好(虽然很慢):www.modwebsolutions.com/test

2 个答案:

答案 0 :(得分:2)

你应该在函数和超时之后为你的函数传递参数。看看documentation

var a1 = setTimeout(drawVertical, 1000, [arguments]);

答案 1 :(得分:1)

在此处执行的操作在设置超时之前称为函数。当代码看到drawVertical([arguments])时,它会立即调用该函数。该函数的返回值是您作为第一个参数传递给setTimeout的函数,因此除非drawVertical返回一个函数,否则这将无效。

所以你可以通过给setTimeout一个函数调用来实现这个目的:

var args = arguments;
var a1=setTimeout(function() { drawVertical([args]); },1000);
...

编辑:我将外部arguments设置为args变量,因为arguments在内部函数中会有所不同。