在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ 關于setTimeout()第一個參數(shù)很奇怪的地方?

關于setTimeout()第一個參數(shù)很奇怪的地方?

var num = 0;
var max = 10;
(function incrementNumber(){
    num++;
    if (num <= max) {
        console.log(num);
        setTimeout(incrementNumber,500)
        //setTimeout(incrementNumber(),500)
    }
    else{
        console.log('done');
    }
})();

謝謝各位,問題已解決: incrementNumber()直接調用函數(shù),返回undefined,導致setTimeout失效,但是incrementNumber()函數(shù)仍然運行,所以最后直接輸出,但是沒有任何時間間隔

當incrementNumber沒有帶括號的時候,運行正確,每隔500ms從1輸出到10.
為什么加上了括號之后incrementNumber(),運行后直接就把1到10輸出來了,沒有任何的間隔時間?

我知道第一個參數(shù)應該是字符串或者函數(shù)(名),但為什么這里加上括號之后沒有出錯呢?(雖然運行結果并不符合預期)
我的理解是最后一次性返回所有數(shù)字沒有問題,但之前應該會有10*500ms總的等待時間?

回答
編輯回答
嘟尛嘴

incrementNumber()執(zhí)行后沒有返回值,相當于你在setTimeout中傳一個空串唄,也不會報錯啊。但是incrementNumber方法還是執(zhí)行了的,而且是立即執(zhí)行了,沒有延遲。

2017年5月15日 21:30
編輯回答
六扇門

setTimeout延時執(zhí)行,應該是指將這個加入到隊列中,而加入隊列是js解析到setTimeout就執(zhí)行的,并非setTimeout的第二個函數(shù)即傳入的時間,那個時間是指到那個時間執(zhí)行傳入setTimeout的函數(shù)。所以你如果第一個參數(shù)加括號,在加隊列的時候會直接把incrementNumber()這個加入到隊列,而incrementNumber()就直接執(zhí)行函數(shù)了,所以加括號的時候incrementNumber不會有時間間隔。

2017年1月18日 22:18
編輯回答
冷眸

倆個結果是相同的吧 這個 在函數(shù)外部包裹小括號然后加小括號 屬于立即調用的意思
而結果都應該是1 2 3 500ms依次輸出 然后done

你程序這樣肯定是沒法觀察具體的情況 屬于一次性執(zhí)行完畢

你在控制臺把加小括號和沒加輸出一下 進行對比就知道了

2017年1月31日 04:44
編輯回答
別瞎鬧

()是函數(shù)調用,不加()是函數(shù)引用。

2018年2月21日 08:46
編輯回答
淺時光

加括號了就是調用該函數(shù)的意思,一個函數(shù)名相當于指針,不加括號就是改函數(shù)的引用

2017年8月27日 11:38
編輯回答
過客

沒問題啊,你把函數(shù)執(zhí)行的返回值(undefined)作為第一個參數(shù),沒有問題啊(除了達不到預期結果)。

2018年5月21日 18:23