函數(shù)表達式跟函數(shù)聲明的區(qū)別

大家好科雳,我是IT修真院武漢第10期學員,一枚正直脓杉、純潔糟秘、善良的前端程序員。

今天給大家分享一下球散,修真院官網(wǎng)任務js-2尿赚,深度思考的知識點——函數(shù)表達式跟函數(shù)聲明的區(qū)別;


1.背景介紹

? ??什么是 Function Declaration(函數(shù)聲明)?

Function Declaration 可以定義命名的函數(shù)變量蕉堰,而無需給變量賦值凌净。Function Declaration 是一種獨立的結構,不能嵌套在非功能模塊中屋讶”埃可以將它類比為 Variable Declaration(變量聲明)。就像 Variable Declaration 必須以“var”開頭一樣皿渗,F(xiàn)unction Declaration 必須以“function”開頭斩芭。

? ??什么是 Function Expression(函數(shù)表達式)?

Function Expression 將函數(shù)定義為表達式語句(通常是變量賦值)的一部分羹奉。通過 Function Expression 定義的函數(shù)可以是命名的秒旋,也可以是匿名的。Function Expression 不能以“function”開頭(下面自調用的例子要用括號將其括起來)诀拭。



2.知識剖析

函數(shù)聲明實例
函數(shù)聲明實際執(zhí)行順序
函數(shù)表達式實際執(zhí)行順序
函數(shù)表達式實例? ? ? ? ? ??

? ? ? ? 函數(shù)表達式跟變量一樣迁筛,有一個var為頭的名字,后面跟一個匿名函數(shù)耕挨,然后在后面調用這個變量名+()就可以調用這個函數(shù)了细卧。在瀏覽器的渲染機制下,變量名get hoisted(被提升)筒占,賦值為undefined贪庙,然后瀏覽器再進行賦值。但是后面的函數(shù)依然按實際順序執(zhí)行翰苫,所以后面的c為2的函數(shù)獲取不到了止邮,因為函數(shù)已經(jīng)return了;


3.常見問題

????函數(shù)表達式創(chuàng)建的函數(shù)大多是匿名的奏窑。在代碼調試的時候比較麻煩导披;

4.解決方案

????建議使用 Named Function Expressions


?Named Function Expressions (命名函數(shù)表達式)?

5.編碼實戰(zhàn)

6.擴展思考

????哪些地方不能用函數(shù)聲明?

????????????官方是禁止在非功能模塊(比如 if)中使用函數(shù)聲明的埃唯。但是所有瀏覽器都支持撩匕,但是各自的解釋方式不同。

7.參考文獻

????????????函數(shù)申明與函數(shù)表達式的區(qū)別

8.更多討論

詳情請看:

視頻鏈接

PPT鏈接

問:Function Expression 會被提升嗎墨叛?

答:這取決于表達式止毕。

問:應該注意什么模蜡?

答:官方是禁止在非功能模塊(比如 if)中使用 Function Declaration 的。但是所有瀏覽器都支持扁凛,但是各自的解釋方式不同忍疾。

問:還有其它理由支持 Function Expression 的嗎?

答:1)Function Declaration 感覺像是要模仿 Java 風格的方法聲明谨朝,但是 Java 方法和 JavaScript 并不一樣膝昆。在 JavaScript 中,函數(shù)是含值的 living 對象叠必。Java 方法僅是對元數(shù)據(jù)的存儲荚孵。下面的兩段代碼都定義了函數(shù),但是只有 Function Expression 看著像創(chuàng)建了對象纬朝。

2)Function Expression 用處更多收叶。Function Declaration 只能作為“statement”孤立存在。它所能做的就是創(chuàng)建一個當前作用域下的對象變量共苛。相比之下判没,F(xiàn)unction Expression(根據(jù)定義)是大型結構的一部分。如果想要創(chuàng)建匿名函數(shù)隅茎、給 prototype(原型)添加函數(shù)或是將函數(shù)用作其它對象的 property(屬性)澄峰,都可以用 Function Expression。每當用高階應用辟犀,比如currycompose俏竞,創(chuàng)建新的函數(shù)時都是在用 Function Expression。Function Expression 和 Functional Programming(函數(shù)式編程)分不開堂竟。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末魂毁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子出嘹,更是在濱河造成了極大的恐慌席楚,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件税稼,死亡現(xiàn)場離奇詭異烦秩,居然都是意外死亡,警方通過查閱死者的電腦和手機郎仆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門只祠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丸升,你說我怎么就攤上這事铆农∥保” “怎么了狡耻?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵墩剖,是天一觀的道長。 經(jīng)常有香客問我夷狰,道長岭皂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任沼头,我火速辦了婚禮爷绘,結果婚禮上,老公的妹妹穿的比我還像新娘进倍。我一直安慰自己土至,他們只是感情好,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布猾昆。 她就那樣靜靜地躺著陶因,像睡著了一般。 火紅的嫁衣襯著肌膚如雪垂蜗。 梳的紋絲不亂的頭發(fā)上楷扬,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音贴见,去河邊找鬼烘苹。 笑死,一個胖子當著我的面吹牛片部,可吹牛的內容都是我干的镣衡。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼档悠,長吁一口氣:“原來是場噩夢啊……” “哼捆探!你這毒婦竟也來了?” 一聲冷哼從身側響起站粟,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤黍图,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奴烙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體助被,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年切诀,在試婚紗的時候發(fā)現(xiàn)自己被綠了揩环。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡幅虑,死狀恐怖丰滑,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情倒庵,我是刑警寧澤褒墨,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布炫刷,位于F島的核電站,受9級特大地震影響郁妈,放射性物質發(fā)生泄漏浑玛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一噩咪、第九天 我趴在偏房一處隱蔽的房頂上張望顾彰。 院中可真熱鬧,春花似錦胃碾、人聲如沸涨享。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灰伟。三九已至,卻和暖如春儒旬,著一層夾襖步出監(jiān)牢的瞬間栏账,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工栈源, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挡爵,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓甚垦,卻偏偏與公主長得像茶鹃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子艰亮,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內容