理解JS立即執(zhí)行函數(shù)調用原理

函數(shù)的兩種定義方法:
函數(shù)聲明

function fn1(){
      console.log('函數(shù)聲明');
}

函數(shù)表達式

var fn2 = function(){
     console.log('函數(shù)表達式')璃氢;
};

函數(shù)包括四個部分哟玷,function關鍵字、函數(shù)名一也、圓括號巢寡、花括號。
期中函數(shù)名稱可以省略 椰苟,此時函數(shù)被稱為匿名函數(shù)
當這種寫法出現(xiàn)在表達式抑月,又稱為函數(shù) 表達式

函數(shù)可以出現(xiàn)在任何允許表達式出現(xiàn)的地方 ---《javaScript語言精粹》

這兩種定義函數(shù)的方法有什么區(qū)別呢?看看以下的對比:

//函數(shù)調用放置在聲明函數(shù)之前舆蝴,函數(shù)能夠被正常調用
fn1()
function fn1(){
    console.log('函數(shù)聲明')
}  //函數(shù)聲明

//函數(shù)調用放置在函數(shù)表達式之前谦絮,結果出現(xiàn)報警
fn1()
var fn1 = function(){
    console.log('函數(shù)表達式')
}  //Uncaught TypeError: fn1 is not a function(…)

根據JavaScript的解析方式,先掃描一遍整個js部分洁仗,將函數(shù)聲明提升至最前方(函數(shù)聲明是一等公民)挨稿,而函數(shù)表達式則只有在解析到其所在位置時才會被解析

根據這個情況,函數(shù)聲明實際上實在其函數(shù)調用前解析的京痢,所以它能夠被正常調用
再看看下面的對比:

//函數(shù)聲明后跟一對圓括號無法調用
function fn1(){
    console.log('函數(shù)聲明')
}()  //Uncaught SyntaxError: Unexpected token ((…)

//函數(shù)表達式后跟一對圓括號可以立即調用
var fn1 = function(){
    console.log('函數(shù)表達式')
}()  //函數(shù)表達式

由以上對比可以知道,函數(shù)以表達式情況出現(xiàn)時篷店,可以以后面加一對圓括號的方式立即調用
所以我們常見的這種立即調用的方法祭椰,實際上可以看成將匿名函數(shù)轉換成了函數(shù)表達式,隨后立即調用

//以下是調試臺的調試結果疲陕,利用這些運算符可以將函數(shù)轉換成表達式形式
//這些可以實現(xiàn)立即調用胯努,而剩余符號會導致報錯
//不過其余的運算符會出現(xiàn)將函數(shù)返回值進行運算的情況无埃,所以常用括號

(function(){console.log('OK')})()
//OK
//undefined

+function(){console.log('OK')}()
//OK
//NaN

-function(){console.log('OK')}()
//OK
//NaN

~function(){console.log('OK')}()
//OK
//-1

!function(){console.log('OK')}()
//OK
//true
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拳锚,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異带膜,居然都是意外死亡,警方通過查閱死者的電腦和手機鸳谜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門膝藕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咐扭,你說我怎么就攤上這事芭挽。” “怎么了蝗肪?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵袜爪,是天一觀的道長。 經常有香客問我薛闪,道長辛馆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任逛绵,我火速辦了婚禮怀各,結果婚禮上,老公的妹妹穿的比我還像新娘术浪。我一直安慰自己瓢对,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布胰苏。 她就那樣靜靜地躺著硕蛹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硕并。 梳的紋絲不亂的頭發(fā)上法焰,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音倔毙,去河邊找鬼埃仪。 笑死,一個胖子當著我的面吹牛陕赃,可吹牛的內容都是我干的卵蛉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼么库,長吁一口氣:“原來是場噩夢啊……” “哼傻丝!你這毒婦竟也來了?” 一聲冷哼從身側響起诉儒,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤葡缰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泛释,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡滤愕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胁澳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片该互。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖韭畸,靈堂內的尸體忽然破棺而出宇智,到底是詐尸還是另有隱情,我是刑警寧澤胰丁,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布随橘,位于F島的核電站,受9級特大地震影響锦庸,放射性物質發(fā)生泄漏机蔗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一甘萧、第九天 我趴在偏房一處隱蔽的房頂上張望萝嘁。 院中可真熱鬧,春花似錦扬卷、人聲如沸牙言。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咱枉。三九已至,卻和暖如春徒恋,著一層夾襖步出監(jiān)牢的瞬間蚕断,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工入挣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亿乳,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓径筏,卻偏偏與公主長得像风皿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匠璧,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容