---
# System prepended metadata

title: JavaScript - 函式 function
tags: [function, javascript]

---

# 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}次`);
```