---
# System prepended metadata

title: '6/28/2024 ##Astro Camp##'
tags: [JavaScript]

---

# 6/28/2024 ##Astro Camp##


## h2
what is function

f(x) = 3x + 2
// 輸入值 與 輸出值 之間的關係
// 函數名字 ＝ 這個關係的名字

*    1. 命名 naming
*   2. 快取 cache


// why??
// 重複使用
// 給程式碼意義
    幫整段找出好名字
    
console.log只是將結果打印出來並不會回傳值(結果)
return會有回傳值但需要將結果打印出來

```javascript=  
function is_adult(input) {
    if (input >= 18) {
        return true;
    } else {
        return false;
    }
}
    
```

//early return
//不寫else相對會輕鬆很多
//console.log寫給自己看的，平時提交要拿掉。
```javascript=
//dont have if else
    
if (input >= 18) {
    return true
}
    return false
}
```


```javascript=
function hi()

const hey = function() {}

const hey = () => {} 
```


// fn = (cititzen)
// 123, "aaa", {}, []
// fn
// 高階函數 (higher-order function)
// 引用別的 fn 當作參數   
// 回傳 fn(function)

```javascript=
function hi(a) {
    console.log(a)

}

function hey() {


 console.log("hey")
 
 
}

hi(123)
hi(hey)
```



// fn = 普通公民、一級物件 (first-class citizen)
// 數字、字串、[]、{}也都是一級物件，主要是要強調函數也是可以被呼叫

// 高階函數（Higher-Order Function）
// - 用別的 fn 當參數
// - 回傳 fn
// - 只要包含其中一種都可以當作高階函數

// callback function (回呼函數=形容可以呼叫但還沒執行的函數)
 ***只要沒有符合以上條件的都是一般函數***

```javascript=
function hi(a) {
  a()
}

function hey() {
  function inner() {
    console.log("inner!!")
  }
  return inner
}

hi(hey)
```



const list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

const even = (n) => {
  return n % 2 == 0
}

const newArray = list.filter(even)
console.log(newArray)



// map, filter, reduce
map()    //對應對照的意思，將裡面的內容改變但總數固定,*空陣列的情況不會運作*
filter() //篩選,將篩選裡面的內容但不會超過原來總數
reduce() //將裡面的內容做歸納但不一定是計算總合

**本身的陣容都會複製一份不會被破壞**
**如果本身沒有回傳值，就會回傳一個空的陣列**
![mapfilterreduce](https://hackmd.io/_uploads/SkXAIeh8C.png)

sort() //預設是使用文字排序
```javascript
const array = [1,9,10,5,3]
const array.sort() = [1,10,3,5,9]
```