---
# System prepended metadata

title: "\U0001F3C5 Day 12 - 函式觀念三、四"
tags: [JS 直播班 - 2025 秋季班]

---

# 🏅 Day 12 - 函式觀念三、四

依照下方程式碼練習，並回答問題。
以下題目請合併為一份 CodePen 繳交，並透過「註解」進行回答。

### 觀念三：函式參數觀念 

可參考課程影音「函式 function - 函式參數介紹、參數寫法」章節

1. 函式可以帶入自定義的參數（在此為 num1, num2），並在呼叫函式的時候傳入。
```javascript=
function callNum(num1, num2){
  let total = num1 + num2;
  console.log(total);
}
// num1 等於 1, num2 等於 2
callNum(1, 2);
// num1 等於 2, num2 等於 4
callNum(2, 4);
```

2. 參數只存活在大括號。

```javascript=
function callNum(num){
  // 在此可以成功呼叫 num
  console.log(num);
}
callNum(1);
// 函數外部不可以呼叫 num，這行會報錯 
// UDrncaught ReferenceError: num is not defined
console.log(num);
```

### 觀念四：函式的 return 觀念 

可參考課程影音「函式 function - return 寫法、return 可以有多個」章節

１. 函式可以用 return 回傳一個值，並可以將該值賦予給其他變數。
```javascript=
function calcTotalScore(chineseScore, englishScore){
  let total = chineseScore + englishScore;
  return total;
}

// 將 calcTotalScore 的回傳值賦值給 markScore。
let markScore = calcTotalScore(60, 50);
console.log(markScore);
```

2. return 會中斷函式執行，可以有多個 return、搭配 if else 做使用。
```javascript=
function calcTotalScore(chineseScore, englishScore){
  let total = chineseScore + englishScore;
    
  // 在此因為 total > 100，所以在第一個 if 函式就中斷了
  if(total > 100){
    return `總分 ${total}，做的好啊 mark`;
  } else {
    return `總分 ${total}，考得不是很好 mark`;
  }

  // 以下的 return 都不會執行
  return chineseScore;
  return englishScore;
}

let markScore = calcTotalScore(60, 50);
console.log(markScore);
```


問題一
---
1. 觀看以下程式碼，最後會印出什麼，以及變數 `sum` 最後的值
```javascript=
let sum = 1;
function calcNum(x) {
  sum += x;
  console.log(x);
}
calcNum(3);
```
2. 下方程式碼宣告了一個陣列（陣列內是[費波那契數列](https://zh.wikipedia.org/zh-tw/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0)），請完成下方程式碼（補上 `...` 的部分），讓 `calcNextNum()` 函式可以正常執行，並讓陣列中最後兩個數字相加後 push 到陣列中，最後 `fibonacciArr` 陣列值為 `[1, 1, 2, 3, 5, 8]`
```javascript=
let fibonacciArr = [1, 1, 2, 3, 5];
let fibonacciArrLength = fibonacciArr.length;
function calcNextNum(...) {
  ...
}
calcNextNum(fibonacciArr[fibonacciArrLength-1], fibonacciArr[fibonacciArrLength-2]);
console.log(fibonacciArr);
```

問題二
---
1. 觀看下方程式碼，選出正確敘述
 選項：
(1) 一個函式中不能有多個 return
(2) return 的值可以賦予到變數上，像是下方程式碼中變數 `midNum` 最後的值會變為 `2` 

    ```javascript=
    let midNum = 0;
    function calcMidNum(num1,num2) {
      return (num1 + num2) / 2;
    }
    midNum = calcMidNum(1,3);
    ```
2. 觀看下方程式碼，選出正確敘述
    ```javascript=
    let awardMoney = 0
    function getAward(score) {
      if(score >= 90) {
        console.log("贏得獎金 100 元");
        return 100;
      } else if(score >= 60) {
        console.log("贏得獎金 50 元");
        return 50;
      } else {
        console.log("再接再厲！");
      }
      console.log("比賽結束！");
    }
    awardMoney = getAward(85);
    ```
    選項：
    (1) 最後會印出 2 個字串
    (2) `awardMoney` 最後的值為 85
    (3) `awardMoney` 最後的值為 50
    
    
<!-- 解答：  

問題一
1. 3, 
   sum: 4

2. 
```javascript=
let fibonacciArr = [1, 1, 2, 3, 5];
let fibonacciArrLength = fibonacciArr.length;
function calcNextNum(last, penultimate) {   // 參數命名可以隨意自訂
  fibonacciArr.push(last+Penultimate);
}
calcNextNum(fibonacciArr[fibonacciArrLength-1], fibonacciArr[fibonacciArrLength-2]);
console.log(fibonacciArr);
```

問題二
1. 2
2. 3
-->