簡體   English   中英

setInterval中的Javascript函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM