JavaScript立即函式(IIFE)

函式宣告完之後,立即呼叫

以下程式碼利用setTimeout搭配迴圈印出01234,不過得到的會是55555

for(var i=0;i<5;i++){
    setTimeout(() => {
        console.log(i);
    }, 1000);
}
這是因為JS是非同步語言,它並不會等待setTimeout完成後才跑下一次迴圈所以得到的都會是5(因為要執行的時候迴圈已經跑完了!)

使用立即函式

for(var i=0;i<5;i++){
    (function(x){
        setTimeout(() => {
            console.log(x);
        }, 1000);
    })(i);
}
這時候就可以正確得到01234了

立即函式程式結構

(function(){...some code})()
(function(parameter){...some code})(parameter)
(function FunctionName(parameter){...some code})(parameter)