# 🏅 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 -->