函式宣告完之後,立即呼叫
以下程式碼利用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)