JavaScript中的立即執(zhí)行函數(shù)理解

前言:早上在看《JavaScript設(shè)計模式與開發(fā)實踐》一書的時候褒翰,看到立即執(zhí)行函數(shù)一詞苍狰,仔細(xì)想了下對立即執(zhí)行函數(shù)(IIFE)好像也不是很了解露筒,雖然很基礎(chǔ)耻涛,但是自己之前都略過去了废酷。所以花點時間補(bǔ)充一下瘟檩。

概念:聲明一個匿名函數(shù),然后馬上調(diào)用這個函數(shù)澈蟆。

理解:一個獨立的詞法作用域墨辛。不僅避免了外界訪問此 IIFE 中的變量,而且又不會污染全局作用域丰介。

一背蟆、函數(shù)的基本寫法

// 1.函數(shù)聲明
// getNum(1) // 不會報錯,正常執(zhí)行
function getNum(num) {
    console.log(num);
}

// 2.函數(shù)表達(dá)式
// getNum2(2)  // 報錯哮幢,not defined
const getNum2 = function (num) {
    console.log(num);
}

二带膀、立即執(zhí)行函數(shù)的寫法

錯誤示范

function getNum3() {
    // console.log(3); // SyntaxError: Unexpected token )
}();

???但是這樣寫卻是可以的

const getNum4 = function () {
    // console.log(4);  // 4
}();

原因是 JavaScript 引擎看到 function 關(guān)鍵字會認(rèn)為這是函數(shù)聲明語句,不應(yīng)該以()結(jié)尾橙垢。
所以要解決這個問題就要讓引擎知道垛叨,()前面部分不是函數(shù)定義語句,而是一個表達(dá)式柜某,可以對此進(jìn)行運(yùn)算嗽元。
比如給前面表達(dá)式加上(),()具有優(yōu)先級喂击,先執(zhí)行剂癌,或者使用運(yùn)算符 + - !~ 等
這種情況下 JavaScript 引擎就會認(rèn)為這是一個表達(dá)式翰绊,而不是函數(shù)聲明佩谷,比如

!function(a){
    console.log(a);   // 1
}(1);

+function(a){
    console.log(a);   // 1
}(1);

一般寫法

// IIFE第一種方法
(function (num) {
    console.log(num); // 5
})(5);


// IIFE第二種寫法
(function (num) {
    console.log(6); // 6
}(6));

使用場景

比較出名的就是 jQuery 的封裝寫法,同理监嗜,立即執(zhí)行函數(shù)大多是用在封裝插件和庫當(dāng)中谐檀,避免被外界影響和污染全局。

暫時寫這些裁奇,后續(xù)再碰到或者加深了理解再回來修改桐猬!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刽肠,隨后出現(xiàn)的幾起案子溃肪,更是在濱河造成了極大的恐慌,老刑警劉巖音五,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乍惊,死亡現(xiàn)場離奇詭異,居然都是意外死亡放仗,警方通過查閱死者的電腦和手機(jī)润绎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人莉撇,你說我怎么就攤上這事呢蛤。” “怎么了棍郎?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵其障,是天一觀的道長。 經(jīng)常有香客問我涂佃,道長励翼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任辜荠,我火速辦了婚禮汽抚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伯病。我一直安慰自己造烁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布午笛。 她就那樣靜靜地躺著惭蟋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪药磺。 梳的紋絲不亂的頭發(fā)上告组,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音癌佩,去河邊找鬼木缝。 笑死,一個胖子當(dāng)著我的面吹牛驼卖,可吹牛的內(nèi)容都是我干的氨肌。 我是一名探鬼主播鸿秆,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酌畜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卿叽?” 一聲冷哼從身側(cè)響起桥胞,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎考婴,沒想到半個月后贩虾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡沥阱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年缎罢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡策精,死狀恐怖舰始,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咽袜,我是刑警寧澤丸卷,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站询刹,受9級特大地震影響谜嫉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凹联,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一沐兰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匕垫,春花似錦僧鲁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至偶惠,卻和暖如春春寿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忽孽。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工绑改, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兄一。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓厘线,卻偏偏與公主長得像,于是被迫代替她去往敵國和親出革。 傳聞我的和親對象是個殘疾皇子造壮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355