settimeout() 方法用於在指定的毫秒數後呼叫函式或執行表示式。返回乙個 id(數字),可以將這個id傳遞給 cleartimeout() 來取消執行。
settimeout(code, milliseconds, param1, param2, ...)settimeout(
function, milliseconds, param1, param2, ...) //
code|function:必需。要呼叫乙個**串,也可以是乙個函式。 第三個及之後的引數:可選,傳給settimeout函式裡面的函式作為他的引數(ie9 及其更早版本不支援第三個及之後的引數)。
settimeout(function(), 3000); //三秒之後執行函式
settimeout(alertfunc, 3000); //
三秒之後呼叫alertfunc函式
function
alertfunc()
在settimeout() 裡面的函式執行之前可以使用 cleartimeout() 方法阻止 settimeout() 裡面的函式執行。
第三個及之後的引數是settimeout()函式的可選引數,是作為引數傳給 settimeout() 方法裡面的匿名函式或者呼叫的函式,ie9 及其更早版本不支援第三個及之後的引數。
//ie9 及其更早版本不支援第三個及之後的引數
var alertfunc = function
(a,b);
settimeout(alertfunc, 2000, "runoob", "google");
//另外一種寫法達到同樣目的
settimeout(function(), 2000);
settimeout(function(), 0);
console.log(2);
console.log(3);
//輸出: 2 3 1
js 是單執行緒的,單執行緒就意味著所有任務需要排隊,前乙個任務結束,才會執行後乙個任務。如果前乙個任務耗時很長,後乙個任務就不得不一直等著。在js中同時維護著乙個任務佇列,上面**中當執行遇到settimeout(fn,millisec)時,會把fn這個函式放在任務佇列中,當js引擎執行緒空閒時並達到millisec指定的時間時,才會把fn放到js引擎執行緒中執行。
settimeout()只是將事件插入了"任務佇列",必須等到當前**(執行棧)執行完,主線程才會去執行它指定的**函式。要是當前**耗時很長,有可能要等很久,所以並沒有辦法保證,**函式一定會在settimeout()
指定的時間執行。
經典問題:
在for迴圈中使用 var 宣告變數是全域性變數,當for迴圈執行完畢,此時的 i 是5。再經過一秒鐘後分別呼叫settimeout函式,輸出的 i 都是全域性作用域中的 i ,即5。
for(var i=0; i<5; i++), 1000);}
let 關鍵字使每一次for迴圈中都有乙個獨立作用域中的 i ,互不干擾,所以輸出的都是各自作用域中的 i,而不是全域性作用域中的 i
for(let i=0; i<5; i++), 1000);} //
輸出 0 1 2 3 4
for(var i=0; i<5; i++), 1000)})(i)
}
//輸出 0 1 2 3 4
settimeout(function() );
new promise(function
(resolve)
}).then(
function
() );
console.log('**執行結束');
//輸出:馬上執行for迴圈啦 **執行結束 執行then函式啦 定時器開始啦
js 中 setTimeout 的用法
settimeout 在執行時,是在載入後延遲指定時間後,去執行一次表示式,僅執行一次 settimeout 在執行時,它從載入後,每隔指定的時間就執行一次表示式 1,基本用法 執行一段 var i 0 settimeout i 1 alert i 1000 執行乙個函式 var i 0 setti...
js 中 setTimeout 的用法
settimeout 在執行時,是在載入後延遲指定時間後,去執行一次表示式,僅執行一次 settimeout 在執行時,它從載入後,每隔指定的時間就執行一次表示式 1,基本用法 執行一段 var i 0 settimeout i 1 alert i 1000 執行乙個函式 var i 0 setti...
js中setTimeout 的使用
settimeout 在執行時,是在載入後延遲指定時間後,去執行一次表示式,僅執行一次 settimeout 在執行時,它從載入後,每隔指定的時間就執行一次表示式 1,基本用法 執行一段 var i 0 settimeout i 1 alert i 1000 執行乙個函式 var i 0 setti...