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

所謂立即執(zhí)行函數(shù)就是聲明一個(gè)匿名函數(shù)幔托,立即執(zhí)行它

一般有三種寫(xiě)法:

   (function(){})();
   (function(){}());
   !function(){}();

首先我們需要搞清楚函數(shù)表達(dá)式和函數(shù)聲明區(qū)別,ECMAScript規(guī)范中定義的相當(dāng)模糊:

函數(shù)聲明必須帶有標(biāo)示符(Identifier)(就是大家常說(shuō)的函數(shù)名稱),而函數(shù)表達(dá)式則可以省略這個(gè)標(biāo)示符:
函數(shù)聲明:
  function 函數(shù)名稱 (參數(shù):可選){ 函數(shù)體 }
函數(shù)表達(dá)式:
  function 函數(shù)名稱(可選)(參數(shù):可選){ 函數(shù)體 }

其實(shí)我們常用的區(qū)分方式是根據(jù)上下文,如果function fn(){}作為右值出現(xiàn)(賦值表達(dá)式右邊)那么就是表達(dá)式闺魏,否則就是函數(shù)聲明。有幾種看起來(lái)不常規(guī)的方式需要我們注意

new function fn(){}; //表達(dá)式俯画,因?yàn)樵趎ew 表達(dá)式中
(function(){}());//表達(dá)式析桥,在分組運(yùn)算符中

這樣我們就能理解第二種寫(xiě)法了,就是利用分組運(yùn)算符改變了語(yǔ)法樹(shù)艰垂。同樣第三種寫(xiě)法其實(shí)是利用了一元運(yùn)算符后面跟表達(dá)式的原理泡仗,我們也可以寫(xiě)成

  +function(){}()
  -function(){}()
  ~function(){}()

知道了這些看個(gè)傳入?yún)?shù)調(diào)用的立即執(zhí)行函數(shù)

(function f(f){
    return typeof f();
})(function(){return 1;});// "number"

立即執(zhí)行函數(shù)不再是以空括號(hào)()來(lái)調(diào)用了,同時(shí)傳入了一個(gè)function作為參數(shù)傳入調(diào)用材泄。
當(dāng)函數(shù)執(zhí)行有命名沖突的時(shí)候沮焕,函數(shù)依次填入 變量=》函數(shù)=》參數(shù),所以最后被填入的參數(shù)f會(huì)覆蓋函數(shù)定義f拉宗,typeof f()是對(duì)參數(shù)的調(diào)用峦树,參數(shù)是立即執(zhí)行函數(shù)傳入的function參數(shù)辣辫,返回?cái)?shù)字1,typeof 1是 "number"魁巩。

表達(dá)式返回值

函數(shù)定義表達(dá)式返回的是函數(shù)對(duì)象本身急灭,我們?cè)谡{(diào)用alert或者console.log的時(shí)候會(huì)調(diào)用其toString方法

console.log(function(){alert('a');}) //function (){alert('a');}

函數(shù)調(diào)用表達(dá)式自然是返回函數(shù)的return結(jié)果,但在JavaScript中并不是所有的函數(shù)都有return語(yǔ)句谷遂,對(duì)于沒(méi)有return語(yǔ)句的function葬馋,其調(diào)用表達(dá)式返回undefined,對(duì)于只寫(xiě)個(gè)return的坑爹做法同樣也是返回undefined

(function(){})(); //undefined
(function(){return;})();//undefined

對(duì)象創(chuàng)建表達(dá)式本來(lái)也應(yīng)該很簡(jiǎn)單肾扰,返回new的對(duì)象就可以了

typeof new Date(); //"object"

當(dāng)使用function的構(gòu)造函數(shù)創(chuàng)建對(duì)象(new XXX)的時(shí)候畴嘶,如果函數(shù)return基本類型或者沒(méi)有return(其實(shí)就是return undefined)的時(shí)候, new 返回的是對(duì)象的實(shí)例集晚;如果 函數(shù)return的是一個(gè)對(duì)象窗悯,那么new 將返回這個(gè)對(duì)象而不是函數(shù)實(shí)例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偷拔,一起剝皮案震驚了整個(gè)濱河市蒋院,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莲绰,老刑警劉巖欺旧,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛤签,居然都是意外死亡辞友,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)震肮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)踏枣,“玉大人,你說(shuō)我怎么就攤上這事钙蒙∫鹌伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵躬厌,是天一觀的道長(zhǎng)马昨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)扛施,這世上最難降的妖魔是什么鸿捧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮疙渣,結(jié)果婚禮上匙奴,老公的妹妹穿的比我還像新娘。我一直安慰自己妄荔,他們只是感情好泼菌,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布谍肤。 她就那樣靜靜地躺著,像睡著了一般哗伯。 火紅的嫁衣襯著肌膚如雪荒揣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天焊刹,我揣著相機(jī)與錄音系任,去河邊找鬼。 笑死虐块,一個(gè)胖子當(dāng)著我的面吹牛俩滥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贺奠,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼举农,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了敞嗡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤航背,失蹤者是張志新(化名)和其女友劉穎喉悴,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玖媚,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箕肃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了今魔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勺像。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖错森,靈堂內(nèi)的尸體忽然破棺而出吟宦,到底是詐尸還是另有隱情,我是刑警寧澤涩维,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布殃姓,位于F島的核電站,受9級(jí)特大地震影響瓦阐,放射性物質(zhì)發(fā)生泄漏蜗侈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一睡蟋、第九天 我趴在偏房一處隱蔽的房頂上張望踏幻。 院中可真熱鬧,春花似錦戳杀、人聲如沸该面。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吆倦。三九已至听诸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚕泽,已是汗流浹背晌梨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留须妻,地道東北人仔蝌。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荒吏,于是被迫代替她去往敵國(guó)和親敛惊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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