---
# System prepended metadata

title: "\U0001F3C5 Day 3 - 函式型別"
tags: [TypeScript 30 天證書培訓營 - 2024]

---

# 🏅 Day 3 - 函式

今天的每日任務，我們先來重溫一下 JavaScript 在宣告函式的兩種方式，分別為：

1. **函式陳述式（Function Declaration）**：傳統的函式定義方式。
2. **函式表達式（Function Expression）**：將函式賦值給變數的方式。

## 函式陳述式
函式陳述式它以 **`function`** 關鍵字當作開頭，後面接著函式名稱與對應程式碼。

**主要特性有：**

1. 函式名稱是必需的
2. 函式會被提升 **Hoisting (提升)**

**範例程式碼**：

```tsx=
console.log(add(5, 3));  // 會被提升，所以仍會輸出: 8
function add(x, y){
    return x + y;
}

console.log(add(5, 3));  // 輸出: 8

```

## **函式表達式（Function Expression）**

函式表達式是將函式定義為表達式的一部分，通常是將函式賦值給變數。可以是匿名的（沒有函式名稱）或具名的。唯一的差別在，函式表達式不會被提升，所以只能在函式被賦值之後才能執行。

**主要特性有**：

1. 可以是匿名也可以是具名。
2. 不會被提升，需要在定義之後才能執行。

**範例程式碼**：

```tsx=
console.log(subtract(10, 5));  // 會出錯，Uncaught ReferenceError: subtract is not defined
const subtract = function(x, y) {
    return x - y;
};

console.log(subtract(10, 5));  // 輸出: 5

```



## 函式的型別註釋
接下來我們就來分享，在 TypeScript 中如何針對函式加上型別註釋吧！

你可以為函式的參數和回傳值加入型別註釋：

1. **參數型別**：定義每個參數的型別。
2. **回傳值的型別**：定義函式回傳值的型別。如果函式不回傳任何值，可以使用 **`void`**。

### 範例程式碼

**範例 1：基本函式型別**

```tsx=
function add(x: number, y: number): number {
    return x + y;
}

```

**`add`** 函式有兩個參數 **`x`** 和 **`y`**，它們都是 **`number`** 型別，並且函式回傳一個 **`number`** 型別的值。

## 函式表達式與箭頭函式

在 TypeScript 中，也可以使用 ES6 的箭頭函式（Arrow Function）來簡化函式表達式。

例如，一個箭頭函式的加法函式可以寫成：

```tsx=
const add = (x: number, y: number): number => x + y;

```


## **單選題**

1. TypeScript 中，函式陳述式的主要特點是什麼？
A. 可以被賦值給變數
B. 必須要有函式名稱
C. 都必須要回傳 **`void`**
D. 不可以有回傳值
2. 在 TypeScript 中，函式參數的型別註釋主要作用是什麼？
A. 指定函式執行的時間
B. 定義函式的參數和回傳值的型別
C. 確定函式的名稱
D. 調整函式的性能
4. 以下哪個選項正確定義了一個 TypeScript 函式，該函式接受兩個 **`number`** 類型的參數並回傳一個 **`number`**？
A. **`function add(x, y) { return x + y; }`**
B. **`const add = (x: number, y: number) => x + y;`**
C. **`let add = function(x, y) { return x + y; }`**
D. **`add(x: number, y: number): number { return x + y; }`** 
5. 如果一個 TypeScript 函式不回傳任何值，它的回傳型別應該是什麼？
A. **`number`**
B. **`string`**
C. **`void`**
D. **`boolean`**

## **實做題**

1. 設計一個 **`multiply`** 函式陳述式，設計兩個 **`number`** 型別的參數，並回傳它們的乘積。
2. 宣告一個 **`concatStrings`** 變數，並賦值匿名箭頭函式，以符合函式表達式，設計兩個 **`string`** 型別的參數，並將它們連接起來。
3. 設計一個函式 **`isGreaterThanTen`** 函式陳述式，設計一個 **`number`** 型別的參數，並檢查該數字是否大於 10，回傳 **`boolean`** 值。

## **面試題(選作)**

使用函式陳述式、函式表達式的時機點是什麼時候？


    
## 回報流程

將答案寫在 CodePen，並貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

![](https://i.imgur.com/vftL5i0.png)

<!-- 解答：  


單選題目：B、B、B、C

開發題目：
let score: number = 80;
let message = "Hello, TypeScript!";
let fullName: string = "洧杰";


題目一：
function multiply(x: number, y: number): number {
    return x * y;
}

題目二：
const concatStrings = (str1: string, str2: string): string => {
    return str1 + str2;
};


題目三：
function isGreaterThanTen(num: number): boolean {
    return num > 10;
}

-->




回報區
---


|    Discord    |                          CodePen / 答案                          |
|:-------------:|:----------------------------------------------------------------:|
|洧杰|[Codepen](https://codepen.io/hexschool/pen/poYgYqW?editors=1010)|
|神奇海螺(Discord 名)|[Codepen](https://codepen.io/codemachine0121/pen/LYaZqyG)|
|展誠|[Codepen](https://codepen.io/hedgehogkucc/pen/YzgWBYZ?editors=1010)|
|連小艾|[Codepen](https://codepen.io/bolaslien/pen/RwdRvJZ?editors=1000)|
|苡安|[Codepen](https://codepen.io/yi-an-yang/pen/JjzKxvX)|
|YH.Lo|[Codepen](https://codepen.io/chloelo/pen/XWGKOxJ)|
|ZS|[Codepen](https://codepen.io/irishuang/pen/eYXzxKq)|
|HsienLu|[Codepen](https://codepen.io/Hsienlu/pen/yLwJwLB)|
|Derrick|[Codepen](https://codepen.io/Derricktang/pen/XWGKGJd?editors=0010)|
|YC|[HackMD](https://hackmd.io/SKoJd3EsTlitnjzCx4Rarg)|
|77_0411|[Codepen](https://codepen.io/chung-chi/pen/KKEMJYL?editors=1100)|
|亞當|[Codepen](https://codepen.io/Adam-Hsu/pen/ZEPOPEY?editors=1010)|
|m_m|[CodePen](https://codepen.io/minnn7716/pen/bGZeJEE)|
|hiYifang|[HackMD](https://hackmd.io/@gPeowpvtQX2Om6AmD-s3xw/B1VlA0_uT)|
|wendy_.li|[HackMD](https://hackmd.io/PcmFgqZwRd-4Ep3-LgK5_Q?both)|
|ethan1331|[CodePen](https://codepen.io/EthanTsai/pen/mdoEYKB)|
|BEN|[CodePen](https://codepen.io/Kao-Yu-Chun/pen/yLwJWqr)|
|rikku1756|[CodePen](https://codepen.io/rikkubook/pen/Babzgyq?editors=1011)|
|Judy ☻|[Codepen](https://codepen.io/hsiaohan/pen/wvOWbbY?editors=1010)|
|BonnieChan|[Codepen](https://codepen.io/Bonnie-chan-the-bold/pen/KKEMONW?editors=0010)|
|Yee|[Codepen](https://codepen.io/alivealife/pen/dyrXxNr)|
|Otis|[Codepen](https://codepen.io/humming74/pen/XWGKvME?editors=1011)|
|JC|[Codepen](https://codepen.io/jcsamoyed/pen/OJqXKpy?editors=0011)
|Mi|[CodePen](https://codepen.io/Mi-Jou-Hsieh/pen/rNRLbPq?editors=1111)|
|Teddy|[CodePen](https://codepen.io/TaideLi/pen/zYbKOPO)|
|Zuo|[CodePen](https://codepen.io/linchinhsuan/pen/poYEzex?editors=1010)|
|hannahTW|[CodePen](https://codepen.io/hangineer/pen/QWoKLRY?editors=1010)|
|LinaChen|[CodePen](https://codepen.io/LinaChen/pen/VwRKZJz)|
| 銀光菇 | [CodePen](https://codepen.io/genesynthesis/pen/MWxeLzM) |
| jasperlu005 | [Codepen](https://codepen.io/uzzakuyr-the-reactor/pen/ZEPpEwL) |
| Bryan Chu | [CodePen](https://codepen.io/bryanchu10/pen/gOEwOyJ) |
| NiuNiu | [CodePen](https://codepen.io/Dawson-the-bold/pen/RwdGNrm?editors=0010) |
| deedee1215 | [CodePen](https://codepen.io/diddy032/pen/GRejRrX) |
| gail浴池 | [CodePen](https://codepen.io/GailChang/pen/mdoryZP) |
| shaokang | [CodePen](https://codepen.io/tony-hsueh/pen/OJqRVwQ) |
|Henry_Wu | [CodePen](https://codepen.io/hekman1122/pen/YzgGyPE?editors=1010)|
|Mia | [CodePen](https://codepen.io/Mianzi/pen/poYEgNP?editors=1010)|
|時雨|[Codepen](https://codepen.io/jjustin-35/pen/yLwaOLE)|
|Yang|[Codepen](https://codepen.io/Yang-J/pen/jOJMqGv)|
|yunhung|[Codepen](https://codepen.io/ahung888/pen/qBvaRvo)|
|Starr|[CodePen](https://codepen.io/StarrZhong/pen/NWJRjPa)|
|chaya|[CodePen](https://codepen.io/vickyvvv9/pen/NWJRgzQ?editors=1010)|
|erwin阿瀚|[CodePen](https://codepen.io/yohey03518/pen/gOEwGOw)|
|Jack|[CodePen](https://codepen.io/lj787448952/pen/YzgGQVe)|
|puffy|[codepen](https://codepen.io/TernMayDay/pen/rNRMpgZ)|
|wei|[CodePen](https://codepen.io/jweeei/pen/dyrpbyo)|
|薏慈|[CodePen](https://codepen.io/its_wang/pen/WNmGKdq)|
|shan13|[CodePen](https://codepen.io/yishan13-tsai/pen/OJqRaWo)|
|nina.kuo|[codepen](https://codepen.io/ninakuo0814/pen/WNmGXPN)|
|精靈|[CodePen](https://codepen.io/justafairy/pen/XWGNWNm)|
|楓|[CodePen](https://codepen.io/maplestartend/pen/wvOowxp)|
|bonnieli1414|[CodePen](https://codepen.io/bonnieli1414/pen/KKENMdJ?editors=1011)|
|leave3310|[CodePen](https://codepen.io/leave3310-the-looper/pen/JjzbONR?editors=1011)|
|Lisa|[CodePen](https://codepen.io/lisaha/pen/poYNdNB?editors=1111)|
|Trevor Lin|[CodePen](https://codepen.io/0Trevor0/pen/PoLbejr)|
|Tina|[CodePen](https://codepen.io/TinaTing/pen/poYNqvJ?editors=1010)|
|皓皓|[HackMD](https://hackmd.io/@cutecat8110/SyJUywZYp)|
|翰毅|[CodePen](https://codepen.io/yzuigtdw-the-animator/pen/VwRmoax)|
|Yao|[CodePen](https://codepen.io/AlbertoLL/pen/ZEPBgLB)|
|Alyce|[CodePen](https://codepen.io/alycehwy/pen/MWxjMNe)|
|四季春|[CodePen](https://codepen.io/KuoMin/pen/oNVBjOe)|
|Amberhh | [codepen](https://codepen.io/Amberhh/pen/eYXgZxb)|
| 黃士桓 | [codePen](https://codepen.io/shr-huan-huang/pen/NWJdNew) |
|zoe|[Codepen](https://codepen.io/Zoechiueh/pen/NWJdRPV?editors=0011)|
|Alex|[Codepen](https://codepen.io/datsxzqg-the-selector/pen/oNVBwPZ?editors=0010)|
| Rochel |[Codepen](https://codepen.io/rochelwang1205/pen/MWxJqLp?editors=1010)|
| clairechang |[Notion](https://claire-chang.notion.site/Day-3-c652ceb54e5648588f15ee14554c4434)|
| MCBB_4881 |[Codepen](https://codepen.io/ebvaxaah-the-bashful/pen/oNVBrGL?editors=0010)|
| 小米 |[Codepen](https://codepen.io/joanne-wei/pen/oNVZNWb?editors=0012)|
|aki|[code](https://codepen.io/aki168/pen/poYeqao)|
| fanshu0303 | [CodePen](https://codepen.io/JuiHsuanLee0303/pen/bGZqmPq) |
| Yoshi | [CodePen](https://codepen.io/yoshiyyc/pen/xxBrKpY) |
|Snorlax|[HackMD](https://hackmd.io/@snorlaxpock/ryOINV5tT)|
|kevinhes|[CodePen](https://codepen.io/kevinhes/pen/Babdzpo?editors=0011)|
|Nick Lin|[CodePen](https://codepen.io/NickLinP/pen/zYbdPBp?editors=1111)|
| Han   | [HACKMD](https://hackmd.io/@laihan/B18o2EaKa) |
| Jay   | [CodePen](https://codepen.io/jayredk/pen/mdoBeNJ?editors=0010)
| 大衛   | [CodePen](https://codepen.io/exnsrpjc/pen/oNVpNRP?editors=1011)
| AmberL   | [CodePen](https://codepen.io/autum55853/pen/ZEPaMbX)
| Eileen   | [CodePen](https://codepen.io/Eileen-io/pen/OJqzKoM)
| 狸貓 | [CodePen](https://codepen.io/tanuki320/pen/wvOjpjb?editors=1010)
| 阿鬥鬥 | [CodePen](https://codepen.io/yvonne217/pen/bGZMPbq)
|Tori|[HackMD](https://hackmd.io/OAdkiOH-S_WkD-LF6IONVA?view)|