IIFE (Imdiately Invoked Function Expression 立即執(zhí)行的函數(shù)表達(dá)式)

心系少時(shí)言 等一不歸人
函數(shù)聲明

函數(shù)聲明時(shí)必須有函數(shù)名

function fn(){};
函數(shù)表達(dá)式

函數(shù)表達(dá)式中的函數(shù)可以為匿名函數(shù)糠馆,也可以有函數(shù)名疾呻,但是該函數(shù)不能直接使用落塑,只能通過(guò)表達(dá)式左邊的變量 fn 來(lái)調(diào)用

var fn = function(){};

看看兩者區(qū)別

function a(){
    console.log("函數(shù)聲明");
}
var b = function(){
    console.log("函數(shù)表達(dá)式"); 
}
a();   //函數(shù)申明
b();   //函數(shù)表達(dá)式
a();   //函數(shù)聲明
b();   //報(bào)錯(cuò)
function a(){
    console.log("函數(shù)聲明");
}
var b = function(){
    console.log("函數(shù)表達(dá)式"); 
}

為什么會(huì)有這樣的結(jié)果?
原因: function a(){} 為函數(shù)聲明罐韩,程序運(yùn)行前就已經(jīng)存在憾赁;var b = function(){} 為函數(shù)表達(dá)式,屬于按順序執(zhí)行散吵,所以 b() 會(huì)報(bào)錯(cuò)

進(jìn)入IIFE (立即執(zhí)行的函數(shù)表達(dá)式)

在ES5中龙考,是沒(méi)有塊級(jí)作用域的概念的;我們主要通過(guò)匿名函數(shù)的方式來(lái)塊級(jí)作用域矾睦。
用作塊級(jí)作用域(私有作用域)的匿名函數(shù)的語(yǔ)法:

(function() { //此處是塊級(jí)(私有)作用域 })();

!function () { //此處是塊級(jí)(私有)作用域  } ();   
~function () { //此處是塊級(jí)(私有)作用域  } ();   
-function () { //此處是塊級(jí)(私有)作用域  } ();   
+function () { //此處是塊級(jí)(私有)作用域  } ();   

//這些都是立即執(zhí)行的函數(shù)表達(dá)式的寫(xiě)法
//定義并立即調(diào)用了一個(gè)匿名函數(shù)晦款。將函數(shù)聲明包含在一對(duì)圓括號(hào)中,表示它實(shí)際上是一個(gè)函數(shù)表達(dá)式枚冗。
IIFE 寫(xiě)法的產(chǎn)生:
var a = function() { console.log("IIFE 寫(xiě)法的產(chǎn)生"); };
a();   //IIFE 寫(xiě)法的產(chǎn)生 
//我們將一個(gè)匿名函數(shù)賦值給了一個(gè)全局變量a缓溅,然后調(diào)用了這個(gè)函數(shù)
衍生出 IIFE 寫(xiě)法
(function(){
    console.log("這是一個(gè)立即執(zhí)行的函數(shù)");
})();
//第一個(gè)圓括號(hào):將匿名函數(shù)轉(zhuǎn)換為函數(shù)表達(dá)式
//第二個(gè)圓括號(hào):立即執(zhí)行匿名函數(shù)(當(dāng)然,你也可以設(shè)置一個(gè)函數(shù)名)

總結(jié): 1. 創(chuàng)建塊級(jí)(私有)作用域赁温,避免了向全局作用域中添加變量和函數(shù)坛怪,因此也避免了多人開(kāi)發(fā)中全局變量和函數(shù)的命名沖突
2.IIFE中定義的任何變量和函數(shù),都會(huì)在執(zhí)行結(jié)束時(shí)被銷(xiāo)毀股囊。這種做法可以減少閉包占用的內(nèi)存問(wèn)題袜匿,因?yàn)闆](méi)有指向匿名函數(shù)的引用。只要函數(shù)執(zhí)行完畢稚疹,就可以立即銷(xiāo)毀其作用域鏈

常用實(shí)例

預(yù)期: 使用 setTimeout 循環(huán)輸出 0 1 2 3 4 5

for(var i = 0; i <= 5; i++){
    setTimeout(function timer(){
        console.log(i);
    },  i*1000);
}
//結(jié)果:1秒內(nèi)輸出6個(gè)6

原因: 超時(shí)的回調(diào)函數(shù)都將在循環(huán)完成之后立即運(yùn)行居灯。
解決方法:

方法一:
for(var i = 0; i <= 5; i++){
    (function(){
        var j = i;
        setTimeout(function timer(){
            console.log(j);
        }, j*1000)
    })();
}
//結(jié)果: 0 1 2 3 4 5
方法二:
for(var i = 0; i <= 5; i++){
    (function(j){
        setTimeout(function timer(){
            console.log(j);
        }, j*1000)
    })(i);
}
//結(jié)果: 0 1 2 3 4 5

IIFE 為每次迭代創(chuàng)建了新的作用域,這給了超時(shí)回調(diào)函數(shù)一個(gè)機(jī)會(huì)在每次迭代時(shí)閉包一個(gè)新的作用域内狗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怪嫌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柳沙,更是在濱河造成了極大的恐慌岩灭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件偎行,死亡現(xiàn)場(chǎng)離奇詭異川背,居然都是意外死亡贰拿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)熄云,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膨更,“玉大人,你說(shuō)我怎么就攤上這事缴允〖允兀” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵练般,是天一觀的道長(zhǎng)矗漾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)薄料,這世上最難降的妖魔是什么敞贡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮摄职,結(jié)果婚禮上誊役,老公的妹妹穿的比我還像新娘。我一直安慰自己谷市,他們只是感情好蛔垢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著迫悠,像睡著了一般鹏漆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上创泄,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天艺玲,我揣著相機(jī)與錄音,去河邊找鬼验烧。 笑死板驳,一個(gè)胖子當(dāng)著我的面吹牛又跛,可吹牛的內(nèi)容都是我干的碍拆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慨蓝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼感混!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起礼烈,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弧满,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后此熬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體庭呜,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滑进,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了募谎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扶关。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖数冬,靈堂內(nèi)的尸體忽然破棺而出节槐,到底是詐尸還是另有隱情,我是刑警寧澤拐纱,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布铜异,位于F島的核電站,受9級(jí)特大地震影響秸架,放射性物質(zhì)發(fā)生泄漏揍庄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一东抹、第九天 我趴在偏房一處隱蔽的房頂上張望币绩。 院中可真熱鬧,春花似錦府阀、人聲如沸缆镣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)董瞻。三九已至,卻和暖如春田巴,著一層夾襖步出監(jiān)牢的瞬間钠糊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工壹哺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抄伍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓管宵,卻偏偏與公主長(zhǎng)得像截珍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子箩朴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持岗喉,譯者再次奉上一點(diǎn)點(diǎn)福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠炸庞,并抽取幸運(yùn)大...
    HetfieldJoe閱讀 2,303評(píng)論 0 21
  • 定義函數(shù)的方式有兩種:函數(shù)聲明和函數(shù)表達(dá)式钱床。 函數(shù)聲明的一個(gè)重要特征就是函數(shù)聲明提升,意思是在執(zhí)行代碼前會(huì)先讀取函...
    oWSQo閱讀 665評(píng)論 0 0
  • 以防你沒(méi)有注意到埠居,我先聲明下:我總是要求術(shù)語(yǔ)查牌。所以事期,在聽(tīng)到許多次 流行的,但是讓人誤解的 JavaScript術(shù)語(yǔ)...
    花括弧閱讀 761評(píng)論 0 0
  • 巷 細(xì)想來(lái) 我也該經(jīng)過(guò)繾綣的雨巷 臆想那顰蹙的姑娘 或許她 慣于規(guī)避鄙賤的目光 蜷身在峭寒和細(xì)雨后 等一場(chǎng)秋風(fēng) 而...
    信言不美閱讀 264評(píng)論 0 2
  • p2p如何注冊(cè)_華融道理財(cái) p2p如何注冊(cè)_華融道理財(cái) p2p如何注冊(cè)_華融道理財(cái)
    勞渭雀43371閱讀 194評(píng)論 0 0