潔膚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