(Day04) 陳述式 & 表達式

前言

JavaScript 的語句分成兩種 陳述式、表達式,這兩種語法區分並不困難,接下來會一一介紹,比較特別的是函示也會分為兩種: 函示陳述式、 函示表達式 ,這兩種函示在『提升』特性上會有所差別,最後也會介紹到。

陳述式 (Statement)


陳述式的特色是執行程式碼操作,但『不會回傳任何值』。

常見的陳述式有:

  • 建立變數的 varletconst
  • 判斷用的 if...elseswitch
  • 建立函示的 function (建立但不是呼叫)
  • for 迴圈 …等等
  • MDN 文件 有列出完整的,哪些語法是陳述式

這時想必就會有人想問,我們在瀏覽器建立任意變數時,他都會回傳 undefined,那麼為什麼建立變數不是表達式?

這是因為瀏覽器在建立變數時,會需要替變數製作一個記憶體空間,而回傳的這個 undefined 則是告訴使用者已經為這個變數,建立好對應的記憶空間,而非真正的回傳一個值。
Untitled

表達式 (Expreesion)


又稱運算式,執行表達式時,表達式會『回傳值』

MDN 文件 同樣也有提到表達式的種類。

在上面有提到在瀏覽器建立變數時, 會回傳 undefined ,這點其實在其他『陳述式』上也會發生,例如

1
2
3
4
5
6
7
function test(){
}

if(true){
}

for(var i; i<10 ; i++){}


上述陳述式在執行時都會回傳 undefined
undefined2
但是這些都不是真正的回傳值,而是跟變數一樣,是瀏覽器告訴使用者,已經為了這段程式碼建立好對應記憶體空間,而真正的表達式則是一定會回傳『值』,例如:

1
2
3
4
1 + 1
array = [1,2,3]
array === true


Untitled

函示陳述式


函示根據建立方法分成:函示陳述式、函示表達式 兩種。
函示陳述式就是我們常使用的 function xxx() 由於這種函示帶有自己的名稱,因此又被稱做具名函示,例如:

1
2
3
function test(){
console.log("函示陳述式、又稱具名函示")
}

函示表達式


函式表達式會使用一個變數搭配等號運算子,以及一個函示。

1
2
3
var test = function(){
console.log("函示表達式、又稱匿名函示")
}


兩者主要差別在之前提到的『提升』不同,函示陳述式因為提升效果關係,呼叫函示的 xx() 可以在函示上方

1
2
3
4
test1() //函示陳述式、又稱具名函示
function test1(){
console.log("函示陳述式、又稱具名函示")
}


而函示表達式則不行,根據提升效果 變數 雖然會在創造階段被創造出來,但實際上他是沒有值的狀態,因此將 呼叫函示的 xx() 擺在函示表達式上方,是會跳出錯誤訊息。

1
2
3
4
test2() //test2 is not a function
var test2 = function(){
console.log("函示表達式、又稱匿名函示")
}


參考文獻