簡體   English   中英

JavaScript setTimeOut 似乎不像我預期的那樣工作

[英]JavaScript setTimeOut doesn't seem to work like I expect

這是一個簡單的 JavaScript 文件,我在 Chrome (localhost...) 下運行。 發生的情況是,DIV 背景顏色沒有設置為綠色,然后設置為紅色,而是設置為紅色。 第一個 setTimeout 似乎被忽略了。

<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="utf-8">
<title>Set TimeOuts</title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script> 
<script language="javascript">
function setBGColor()
{ 
var div1 = document.getElementById("div1");
setTimeout(setColor('yellow'),6000);
setTimeout(setColor('red'),6000); 
} 
function setColor(color)
{
    div1.style.backgroundColor=color; 
}
</script>
</head>
<body>
<div id="div1" onclick="setBGColor()";>THIS IS THE COLOR TEST</div> 
</body>
</html>

但是,如果我在 setColor function 中添加警報(顏色),我可以首先看到 div bgcolor go 黃色。 此外,6000 也被忽略。 為什么?

setTimeout(setColor('yellow'),6000);

您正在調用setColor('yellow')並將返回值undefined )傳遞給setTimeout

你需要給它傳遞一個函數。


同樣重要的是要注意setTimeout將導致函數在一段時間后被調用。 它不會讓 JavaScript 在這段時間內休眠。

setTimeout(setColor.bind(window, 'yellow'),6000);
setTimeout(setColor.bind(window, 'red'),6000); 

...將調用setTimeout在0,然后調用setTimeout再晚一秒的一小部分,然后調用setColor('yellow')在6S和setColor('red')之后第二個的一小部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM