洁肤clearTimeout行为我有以下代码:在IE
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<div id="logger"></div>
<script>
function log(txt) {
document.getElementById('logger').innerHTML += txt + '<br>';
}
var int = 10;
var a= setTimeout(function(){
a = null;
log("A fired!");
clearTimeout(b);
b = null;
}, int);
var b = setTimeout(function(){
b = null;
log("B fired!");
clearTimeout(a);
a = null;
}, int);
</script>
</body>
</html>
两个超时回调应防止发射另一个另一个。在Opera中,FF和Chrome只有第一个(打印“A fired”)被执行。但是当我在IE6和IE8中运行相同的代码时,两个回调都会执行。这是我的脚本中的一些错误,还是这些浏览器充满了这些错误之一?做clearTimeout()/ clearInterval()保证回调在调用后不会被调用?
作为@qwerty指出你的'VAR了'和'VAR B'分配非常接近,我认为在IE稍慢JavaScript引擎需要更长时间完成你的'log'语句,所以'clearTimeout'调用在函数被调用后发生。在分配'var b'时,为'setTimeout'调用'2 * int',并且您不会看到它被调用,因为有足够的延迟来完成'var a'调用并清除超时。 – 2011-05-02 05:23:42
_Try 2 * int setTimeout call_ - 这没什么好玩的:)在一个复杂的脚本中,你不能保证超时不会同时触发。 – Egorinsk 2011-05-02 06:34:47
@Egorinsk:也许你可以改变这个问题的接受答案? – robocat 2013-04-23 02:48:21