# JavaScript - 函式 function
###### tags: `javascript` `function`
## 函式 function
* function:設定指令
### 寫法
```javascript=
// 宣告一個指令
// 機器人-早起活動-起床、刷牙、洗臉、出門
function morningAction(){
console.log('起床');
console.log('刷牙');
console.log('洗臉');
console.log('出門');
};
// 呼叫執行指令
morningAction();
>起床
>刷牙
>洗臉
>出門
```
### 設計多組函式流程
* 可有多組函式
* 函式裡面仍可以執行函式
* 常用功能獨立成一個函式
```javascript=
// 機器人-早晨活動
function morningAction() {
console.log("起床");
// 函式裡面仍可以執行函式
cleanFace();
// console.log("刷牙");
// console.log("洗臉");
console.log("出門");
}
// 機器人-晚上活動
function nightAction() {
console.log("回家");
// 函式裡面仍可以執行函式
cleanFace();
// console.log("刷牙");
// console.log("洗臉");
console.log("睡覺");
}
// 常用功能獨立成一個函式
// 清潔臉部動作
function cleanFace() {
console.log("刷牙");
console.log("刮鬍子");
console.log("洗臉");
}
morningAction();
nightAction();
cleanFace();
```
### 函式參數
```javascript=
// 自己命名參數為 num
function a(num, num2) {
console.log(num);
console.log(num2);
}
a(1, 2);
a(3, 4);
console.log(num);
// num is not defined
// 參數跟變數不一樣,參數只存活在大括號
```
>參數跟變數不一樣,參數只存活在大括號
### 以函式設計小工具
```javascript=
// 函式 兩個數字相加小工具
function plus(num1, num2) {
console.log(`您加總的數字為${num1 + num2}`);
}
plus(10, 15);
>25
// 函式 兩個數字相減小工具
function minus(num1, num2) {
console.log(`您相減的數字為${num1 - num2}`);
}
minus(10, 3);
>7
// 函式 兩個數字相乘小工具
function multiply(num1, num2) {
console.log(`您相乘的數字為${num1 * num2}`);
}
multiply(2, 6);
>12
// 函式 兩個數字相除小工具
function divided(num1, num2) {
console.log(`您相除的數字為${num1 / num2}`);
}
divided(10, 5);
>2
```
### return
* return 功能:回傳值
* return 可以中斷函式的執行,後面的函式就不跑了
```javascript=
// 國文分數+數學分數 的加總計算機
function calcTotalScore(chineseScore, mathScore) {
// console.log(chineseScore + mathScore);
let totalScore = chineseScore + mathScore;
return totalScore;
console.log("QQ");
}
// return 可以中斷函式的執行,後面的函式就不跑了
// 運算
calcTotalScore(40, 60);
// 將運算結果存起來
let markTotalScore = calcTotalScore(40, 60);
// 若沒有 return,則結果仍為 undefined
let tomTotalScore = calcTotalScore(100, 100);
console.log(`Tom 的總分為 ${tomTotalScore}`);
```
* return 可以有多個
```javascript=
// return 可以有多個
// 檢查學生成績是否及格的函式
function checkScore(score) {
// console.log(score);
if (score >= 60) {
return "及格";
} else {
return "不及格";
}
}
let tomScore = checkScore(60);
console.log(tomScore);
let bobScore = checkScore(50);
console.log(bobScore);
```
>寫程式沒有最佳解法,只有當下最適合
>小步測試,反覆驗證
```javascript=
// 取餘數 % == 0 為偶數
// 輸入數值
// let myInput = 11;
// let checkNum = myInput % 2 == 0;
// console.log(checkNum);
// 紀錄函式執行次數
let count = 0;
// 設計函式:判斷是否為偶數的工具
function checkNumber(myInput) {
count += 1;
if (myInput % 2 == 0) {
// console.log('偶數');
return '偶數';
} else {
// console.log('不是偶數');
return '不是偶數';
}
}
let checkSevenNum = checkNumber(7);
console.log(checkSevenNum);
let checkEightNum = checkNumber(8);
console.log(checkEightNum);
console.log(`目前記錄您已執行${count}次`);
// checkNumber(12);
// checkNumber(7);
// checkNumber(3);
// checkNumber(4);
```
* let 全域與區域變數邏輯
* 說明:函式程式碼的邏輯會從所在區域內先找尋有無該變數,若無則再往外層找尋有無該變數,若再沒有找到則顯示 "指定變數 is not defined"。
```javascript=
// 紀錄執行了幾次函式功能
let count = 0;
function test() {
count += 1;
console.log('test1');
}
test();
test();
test();
test();
console.log(`目前記錄您執行了${count}次`);
```