[英]Javascript function in setInterval
我有以下代碼:
var foo=5;
var los= function (){
alert(foo);};
setInterval(los, 1000);
可以正常工作。
如果我將其更改為:
var los= function (){
alert(foo);};
setInterval(los(), 1000);
它只執行一次,控制台中沒有錯誤。 有人可以解釋一下為什么在setInterval
函數中在los
之后加上括號時會發生這種情況嗎?
因為您正在執行los()
,然后該(單個)執行的結果傳遞到setInterval
函數中。
setInterval
需要傳入的函數,而不是undefined
,這是los
返回的。 但是,它沒有抱怨-它什么也沒做。
請記住,在JavaScript中,函數是一個對象,就像其他任何變量一樣傳遞。 因此,這是對該函數的引用:
los
另一方面,它執行函數並評估其結果:
los()
因此,當您執行此操作時:
setInterval(los(), 1000)
您不是在功能上設置間隔,而是在功能的結果上設置。 因此,例如,如果函數返回true
那么您實際上就是在編寫:
setInterval(true, 1000)
該函數執行一次,然后重復間隔以獲取結果。 您想要的是在間隔中使用函數引用本身:
setInterval(los, 1000)
這樣, setInterval
將在每個間隔執行函數,而不是執行其結果(不執行任何操作)。
第二種方法中的()
意味着在將結果傳遞給setInterval
之前先 調用該函數。 括號是明確要求調用函數的運算符。 這就是為什么要在setInterval
的參數setInterval
加上括號。
函數名稱本身就是JavaScript中的有效表達式。 這樣的表達式的值是對該函數的引用。 這是設置間隔計時器時想要的值-您想告訴系統計時器到期時要調用的函數,因此您要傳遞對它的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.