我用这个打了一个死胡同,已经抓了半天头。问题很奇怪,如果你想看看我的源代码: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
答案 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
在内部函数中会有所不同。