JS中的setTimeout 函式

2022-06-13 16:42:09 字數 1991 閱讀 6908

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...