setTimeout()呼叫的函式傳遞引數簡單介紹

螞蟻小編發表於2017-03-25

關於setTimeout()函式的基本用法這裡就不多介紹了,具體可以參閱setTimeout()方法一章節。 

本章節介紹一下如何給呼叫的函式傳遞引數,先看一段程式碼:

[JavaScript] 純文字檢視 複製程式碼
function func(a,b){
  console.log(a+b);
}
setTimeout(func(2,2),5000);

很多初學者可能用上面的方式為呼叫的函式傳遞引數,其實這是錯誤的,這個時候函式直接執行了,而不是在指定的時間之後執行。

當setTimeout()函式第一個引數不使用引號的時候,那麼第一個引數就是一個回撥函式,傳遞的是函式的引用。

程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼
function func(a,b){
  return function(){
     console.log(a+b);
  }
}
setTimeout(func(2,2),5000);

以上程式碼實現了我們的要求,可以再5秒之後輸出a和b的和,下面對程式碼做一下簡要介紹。

func()函式可以傳遞兩個引數並返回的是一個函式物件,實質上也就是被返回的這個函式作為回撥函式傳遞給setTimeout()。

帶有引號的引數傳遞方式:

[JavaScript] 純文字檢視 複製程式碼
function func(a,b){
  console.log(a+b);
}
setTimeout("func(2,2)",1000);

上面的方式也可以實現我們的要求,也可以傳遞引數,但是需要特別注意作用域問題。

關於作用域問題可以參閱setInterval()由於作用域問題找不到呼叫函式報錯一章節。

相關文章