# 🏅 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 可以有多個」章節
1. 函式可以用 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
-->