立即執(zhí)行函數(shù)

錯誤之處,歡迎指正。


使用var關(guān)鍵字,在全局作用域中聲明變量會造成全局對象污染。

var a = 1;
console.log(a) //1
console.log(window.a) //1

寫在函數(shù)作用域中,就完全不會造成全局對象污染。

function test() {
  var a = 1;
  console.log(a);     //1
  console.log(window.a);   //undefined
}

但是此時test函數(shù)造成了全局對象污染。

function test() {
  var a = 1;
}
console.log(test);    //函數(shù)體
console.log(window.test);   //函數(shù)體

當函數(shù)成為一個表達式時,它不會污染全局對象,可以使用小括號將函數(shù)用括起來,來把函數(shù)變?yōu)橐粋€函數(shù)表達式。

var test = function () {
    console.log(123);
}

上面這種也是使用函數(shù)表達式的方式來聲明函數(shù),函數(shù)表達式不會帶來函數(shù)提升。

(function test() {});
console.log(test);    //test is not defined
console.log(window.test);   //undefined

此時帶來了一個問題,無法使用函數(shù)名對函數(shù)進行調(diào)用,那么函數(shù)也就沒有辦法執(zhí)行。
函數(shù)表達式的方式會把函數(shù)體返回,所以在表達式后面添加小括號,就相當于執(zhí)行了這個函數(shù)。

(function test() {
  var a = 1;
  console.log(a)  //1
})();  //可以理解為test();

上面的函數(shù)稱之為立即執(zhí)行函數(shù)(IIFE)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容