JS —— 立即執(zhí)行表達(dá)式

了解立即表達(dá)式前我們來回顧下函數(shù)表達(dá)式吧。定義函數(shù)的方式有兩種:一種是函數(shù)聲明,另一種就是函數(shù)表達(dá)式。我們最熟悉的函數(shù)表達(dá)式肯定是匿名函數(shù)賦值給變量栓辜。

var method = function(){ 
console.log("this is a function")
}
method() //this is a function

函數(shù)表達(dá)式不是我們的主角,在以上代碼中垛孔,匿名函數(shù)被賦值給了變量method,通過變量名+()就執(zhí)行了函數(shù)啃憎,這樣說你是不是發(fā)現(xiàn)了什么?變量名后面的()就是立即執(zhí)行表達(dá)式似炎,函數(shù)表達(dá)式+()就能立即執(zhí)行該函數(shù)(劃重點(diǎn))辛萍。對(duì)此我是這樣理解的(才疏學(xué)淺,理解錯(cuò)誤還請(qǐng)告知)

不管是函數(shù)申明還是函數(shù)表達(dá)式羡藐,都有一個(gè)函數(shù)名贩毕,這個(gè)函數(shù)名是函數(shù)在內(nèi)存中的地址,瀏覽器要執(zhí)行函數(shù)代碼需靠它尋址仆嗦,而()的功能就是告知瀏覽器辉阶,我要執(zhí)行這個(gè)函數(shù),麻煩你通過它的地址找到它并執(zhí)行代碼瘩扼。匿名函數(shù)并沒有將自己的地址告訴給任何變量谆甜,所以一般要調(diào)用匿名函數(shù)需要立即調(diào)用表達(dá)式。

大家再看看以下代碼

function(){
    // write something here
}()
這里瀏覽器會(huì)報(bào)錯(cuò)<隆9嫒琛!

為什么呢栽燕?明明匿名函數(shù)可以將自己賦值給變量罕袋,那匿名函數(shù)不就相當(dāng)于會(huì)返回自己的地址么?其實(shí)不然碍岔,在var method = function(){ }中浴讯, JavaScript 將 function 關(guān)鍵字當(dāng)作一個(gè)函數(shù)聲明的開始,而函數(shù)聲明后面不能跟圓括號(hào)蔼啦。然而榆纽,函數(shù)表達(dá)式的后面可以跟圓括號(hào)。要將函數(shù)聲明轉(zhuǎn)換成函數(shù)表達(dá)式,只要像下面這樣給它加上一對(duì)圓括號(hào)即可

(function(){
    // write something here
})()

代碼中的一對(duì)括號(hào)就是將函數(shù)申明轉(zhuǎn)換為函數(shù)表達(dá)式奈籽,相同的功能還有亮元!,+唠摹,-,=奉瘤,這也解釋了為什么method是函數(shù)表達(dá)式了勾拉,因?yàn)?= 將匿名函數(shù)轉(zhuǎn)化為了函數(shù)表達(dá)式,值得注意的是在匿名函數(shù)賦值時(shí)不能使用+,-,!盗温,應(yīng)為他們會(huì)將函數(shù)表達(dá)式直接進(jìn)行類型轉(zhuǎn)換——NaN或false藕赞。

(function(a){
    console.log(a);   //firebug輸出1234,使用()運(yùn)算符
}(1234));
 
!function(a){
    console.log(a);   //firebug輸出12345,使用卖局!運(yùn)算符
}(12345);
 
+function(a){
    console.log(a);   //firebug輸出123456,使用+運(yùn)算符
}(123456);
 
-function(a){
    console.log(a);   //firebug輸出1234567,使用-運(yùn)算符
}(1234567);

那函數(shù)(匿名函數(shù))到底會(huì)不會(huì)返回值呢斧蜕?我試了下用console.log()輸出函數(shù),結(jié)果如下:



console.log會(huì)直接打印函數(shù)砚偶,匿名函數(shù)亦同


那直接將帶名的函數(shù)賦值會(huì)怎么樣呢批销?


將已經(jīng)申明的函數(shù)賦值給變量,就會(huì)發(fā)現(xiàn)函數(shù)申明中出現(xiàn)的函數(shù)名染坯,此處為d會(huì)無效均芽,但是查詢函數(shù)的名字,又是d单鹿。
(Firefox掀宋、 Safari、 Chrome 和 Opera 都給函數(shù)定義了一個(gè)非標(biāo)準(zhǔn)的 name 屬性仲锄,通過這個(gè)屬性可以訪問到給函數(shù)指定的名字劲妙。這個(gè)屬性的值永遠(yuǎn)等于跟在 function 關(guān)鍵字后面的標(biāo)識(shí)符。

//只在 Firefox儒喊、 Safari镣奋、 Chrome 和 Opera 有效
alert(functionName.name); //"functionName")

在以上代碼中我們可以發(fā)現(xiàn),函數(shù)申明的方式進(jìn)行函數(shù)表達(dá)式賦值怀愧,被申明的函數(shù)名(例如函數(shù)d)會(huì)無效化唆途,也就是函數(shù)表達(dá)式會(huì)直接將其視為匿名函數(shù),但是并不會(huì)更改函數(shù)的.name屬性

總結(jié)

  • 函數(shù)表達(dá)式:變量名 = 匿名函數(shù) >>> m = function(){}
  • 立即執(zhí)行表達(dá)式 >>> (function())() 或 (function()())
  • 匿名函數(shù)轉(zhuǎn)換為函數(shù)表達(dá)式:+掸驱,-肛搬,!毕贼,=温赔,()
  • 已經(jīng)有名字的函數(shù)(有名函數(shù))和匿名函數(shù),直接打印會(huì)輸出函數(shù)本身及其代碼
  • 直接將函數(shù)申明賦值給變量會(huì)將函數(shù)地址所有權(quán)轉(zhuǎn)讓給變量鬼癣,而函數(shù)名會(huì)失去函數(shù)表達(dá)式的功能
  • 函數(shù)一旦被命名陶贼,函數(shù)名.name的值就固定了啤贩,不會(huì)改變(匿名函數(shù)屬于未命名狀態(tài))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拜秧,隨后出現(xiàn)的幾起案子痹屹,更是在濱河造成了極大的恐慌,老刑警劉巖枉氮,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件志衍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡聊替,警方通過查閱死者的電腦和手機(jī)楼肪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惹悄,“玉大人春叫,你說我怎么就攤上這事∑郏” “怎么了暂殖?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)当纱。 經(jīng)常有香客問我央星,道長(zhǎng),這世上最難降的妖魔是什么惫东? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任莉给,我火速辦了婚禮,結(jié)果婚禮上廉沮,老公的妹妹穿的比我還像新娘颓遏。我一直安慰自己,他們只是感情好滞时,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布叁幢。 她就那樣靜靜地躺著,像睡著了一般坪稽。 火紅的嫁衣襯著肌膚如雪曼玩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天窒百,我揣著相機(jī)與錄音黍判,去河邊找鬼。 笑死篙梢,一個(gè)胖子當(dāng)著我的面吹牛顷帖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼贬墩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼榴嗅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陶舞,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤嗽测,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后肿孵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唠粥,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年颁井,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蠢护。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雅宾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葵硕,到底是詐尸還是另有隱情眉抬,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布懈凹,位于F島的核電站蜀变,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏介评。R本人自食惡果不足惜库北,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望们陆。 院中可真熱鬧寒瓦,春花似錦、人聲如沸坪仇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椅文。三九已至喂很,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皆刺,已是汗流浹背少辣。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羡蛾,地道東北人毒坛。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親煎殷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屯伞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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

  • 今天下班后,朋友拖著我去花都逛街豪直,準(zhǔn)備給自己買衣服褲子劣摇,我只好不情不愿的陪他來,結(jié)果逛了一整天弓乙,他居然什么也沒買末融,...
    肆零柒閱讀 346評(píng)論 0 0
  • 眼前的山 黃了又綠,綠了又黃 多少雨打風(fēng)霜 不改生命的航向 不像我這樣的人 每天來去匆忙 對(duì)于腳下的路 卻不知道是...
    韓不問閱讀 282評(píng)論 0 4
  • 戒指是彩虹 爭(zhēng)執(zhí)是玫瑰 葡萄酒是重錘 結(jié)痂的傷口被人用指甲蓋 輕輕掀開 露出新生的粉紅色嫩肉 連衣裙是洋紅 天空是...
    腹黑大大閱讀 300評(píng)論 0 0
  • 在2017年的7月8日暇韧,我和在機(jī)場(chǎng)認(rèn)識(shí)的中國人一同結(jié)伴踏上了印尼這個(gè)國土勾习。我選擇的志愿地方是印尼望加錫。它是一個(gè)海...
    JaniceChow閱讀 785評(píng)論 0 2