---
# System prepended metadata

title: 十一、 函式 `function`
tags: [2020七月第二週, JS101, Lidemy心得, 7/8, 進度筆記, JavaScript]

---

# 十一、 函式 `function` 
###### tags: `JavaScript` `JS101` `2020七月第二週` `進度筆記` `Lidemy心得` `7/8`

---

數學上的函數 `y=f(x)` 跟程式的函式是類似的東西，函式為丟某個東西進去就會回傳值:

![](https://i.imgur.com/WIUU2Ek.png)

---

## JavaScript 的函式
### 基本結構:

    function f() { 
      return 
    }

f 為函式名稱，可以更動; () 內放參數，參數名稱也可以隨意更動;

例如:

    function f(a, b, c) {
      return a + 2*b + 3*c
    }
    
    console.log(f(1, 2, 3))
    // 答案會是 14 。
    
---

### 目標可以執行
可以執行物件在區塊內:

    function f(x) {
      return {
        answer: x*2
      }
    }
    
    console.log(f(10))
    // 答案會是 20 。
    
為何目標 undefined ? :    

    function f(x) {
      return  // 這邊會傳回 undefined;
      { 
        answer: x*2
      }
    }
    
    console.log(f(10))
    
一行一行看會是 ， function f(x) {
return 這是第一句，因後面沒接區塊，所以回傳 undefined
{ answer } 這邊是第二句，會變成無意義。 }
最後跑 console.log(f(10)) ， 但因上面已回傳 undefined ， 所以會直接印出。

---

### 可以產生陣列
函式區塊內也可以接陣列，假設我要自動產生一個規律到 10 : 

    function makeArray(n) {
      var result = []
      for (var i=1; i<=n; i++) {
        result.push(i)
      }
      return result
    }
    console.log(makeArray(10))
    // 會印出 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
    
最後一行如果改成 `console.log(makeArray)` 則會印出 [Function: makeArray] 這是一個函式。

---

也可更改參數數目，並要求回傳某值到某值之間:


    function makeArray(from, to) {
      var result = []
      for (var i=from; i<=to; i++) {
        result.push(i)
      }
      return result
    }
    console.log(makeArray(3, 10))
    // 會印出 [ 3, 4, 5, 6, 7, 8, 9, 10 ]
    
參數也可以自己取名，通常建議可以看出 range 的，像是 (from, to) ， (min, max) 。

---

也可以傳變數給 console.log(makeArray(3, 10)) : 

    function makeArray(from, to) {
          var result = []
          for (var i=from; i<=to; i++) {
            result.push(i)
          }
          return result
        }
        var a = 3
        var b = 10
        console.log(makeArray(a, b))
        // 會印出 [ 3, 4, 5, 6, 7, 8, 9, 10 ]
    
最後一行 `console.log(makeArray(a, b))` 表示傳進去的值，其傳進去的值不一定要跟第一行的 `function makeArray(from, to) {` ( )內的參數同名稱，但函式參數名稱，需跟函式區塊內迴圈起始條件和終止條件的名稱一致。

---

也可以不用 console.log 回傳值:

    function log(n) {
      for (var i=1; i<=n; i++) {
        console.log(i)
          }
        }
        log(10)
        // 會印出 1 到 10 (隔行)。

---

### 解題的時候不知道怎麼解，可以先從寫 function 開始，先寫一個大綱。

    function printTo100() {
    
    }
    
    printTo100
    
假設寫出從 1 到 100 的偶數:

    function logEven(number) {
      if (number%2===0) {
        console.log(number)
      }
    }
    function printTo100() { //這邊開始都是結構，比較能看出想要做甚麼;
      for (var i=1; i<=100; i++) {
        logEven(i)
          }
        }
        printTo100(100)
        // 會從 2 開始印直到 100 的偶數。

---

自己 try 偶數到 100 :    

    function printTo100(n) {
      for (var i=1; i<=n; i++) {
        console.log(++i)
          }
        }
        printTo100(100)
        // 。


---
自己 try，自動產生偶數規律到 10 :  

    function makeArray(n) {
      var result =  []
      for (var i=1; i<=n; i++) {
        result.push(++i)
         console.log(i)
      }
      return result
    }
    console.log(makeArray(10))




