亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js中定時器setTimeout函數的問題?

js中定時器setTimeout函數的問題?

Git
千萬里不及你 2019-02-03 09:05:54
對于函數:function startMove(){div1.style.left=div1.offsetLeft+20+"px";setTimeout('startMove()',300);}請問:setTimeout是在上一個回調函數執行結束后,等指定的delay秒后再執行,還是上一個回調函數開始執行后(不管有沒有執行完)就立即等delay秒后執行,還是上一個回調函數開始執行后(不管有沒有執行完)就立即等delay秒,如果此刻上一個回調函數執行完了,就立即執行(等待時間恰好是delay秒),否則等上一個回調函數執行完,再執行,此時等的時間已經大于delay秒了。
查看完整描述

2 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

都是等待執行完畢后執行的,可以嘗試跑這段代碼:

123setInterval (function () {    alert('每次同時只會出現一個');}, 3000);

setTimeout 這個函數是在延時后執行 1 次。而 setInterval 是一直延時、執行重復。


查看完整回答
反對 回復 2019-03-14
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

setTimeout是在上一個回調函數執行結束后,等指定的delay秒后再執行,setInterval是上一個回調函數開始執行后(不管有沒有執行完)就立即等delay秒后執行

然而

我們對JavaScript定時器存在一個誤解,JavaScript其實是運行在單線程的環境中的,這就意味著定時器僅僅是計劃代碼在未來的某個時間執行,而具體執行時機是不能保證的,因為頁面的生命周期中,不同時間可能有其他代碼在控制JavaScript進程。在頁面下載完成后代碼的運行、事件處理程序、Ajax回調函數都是使用同樣的線程,實際上瀏覽器負責進行排序,指派某段程序在某個時間點運行的優先級。

我們可以可以把JavaScript想象成在時間線上運行。當頁面載入的時候首先執行的是頁面生命周期后面要用的方法和變量聲明和數據處理,在這之后JavaScript進程將等待更多代碼執行。當進程空閑的時候,下一段代碼會被觸發
除了主JavaScript進程外,還需要一個在進程下一次空閑時執行的代碼隊列。隨著頁面生命周期推移,代碼會按照執行順序添加入隊列,例如當按鈕被按下的時候他的事件處理程序會被添加到隊列中,并在下一個可能時間內執行。



查看完整回答
反對 回復 2019-03-14
  • 2 回答
  • 0 關注
  • 653 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號