(Day04) 陳述式 & 表達式
前言
JavaScript 的語句分成兩種 陳述式、表達式,這兩種語法區分並不困難,接下來會一一介紹,比較特別的是函示也會分為兩種: 函示陳述式、 函示表達式 ,這兩種函示在『提升』特性上會有所差別,最後也會介紹到。
陳述式 (Statement)
陳述式的特色是執行程式碼操作,但『不會回傳任何值』。
常見的陳述式有:
- 建立變數的
var
、let
、const
- 判斷用的
if...else
、switch
, - 建立函示的
function
(建立但不是呼叫) for
迴圈 …等等- MDN 文件 有列出完整的,哪些語法是陳述式
這時想必就會有人想問,我們在瀏覽器建立任意變數時,他都會回傳 undefined
,那麼為什麼建立變數不是表達式?
這是因為瀏覽器在建立變數時,會需要替變數製作一個記憶體空間,而回傳的這個 undefined
則是告訴使用者已經為這個變數,建立好對應的記憶空間,而非真正的回傳一個值。
表達式 (Expreesion)
又稱運算式,執行表達式時,表達式會『回傳值』
MDN 文件 同樣也有提到表達式的種類。
在上面有提到在瀏覽器建立變數時, 會回傳 undefined
,這點其實在其他『陳述式』上也會發生,例如
1 | function test(){ |
上述陳述式在執行時都會回傳 undefined
但是這些都不是真正的回傳值,而是跟變數一樣,是瀏覽器告訴使用者,已經為了這段程式碼建立好對應記憶體空間,而真正的表達式則是一定會回傳『值』,例如:
1 | 1 + 1 |
函示陳述式
函示根據建立方法分成:函示陳述式、函示表達式 兩種。
函示陳述式就是我們常使用的 function xxx()
由於這種函示帶有自己的名稱,因此又被稱做具名函示,例如:
1 | function test(){ |
函示表達式
函式表達式會使用一個變數搭配等號運算子,以及一個函示。
1 | var test = function(){ |
兩者主要差別在之前提到的『提升』不同,函示陳述式因為提升效果關係,呼叫函示的 xx()
可以在函示上方
1 | test1() //函示陳述式、又稱具名函示 |
而函示表達式則不行,根據提升效果 變數 雖然會在創造階段被創造出來,但實際上他是沒有值的狀態,因此將 呼叫函示的 xx()
擺在函示表達式上方,是會跳出錯誤訊息。
1 | test2() //test2 is not a function |
參考文獻
- JavaScript 核心篇 (六角學院)
- JavaScript 核心觀念(11)-運算子、型別與文法-陳述式與表達式
- MDN 文件 - 陳述式與宣告
- MDN 文件 - 運算式與運算子