# 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() //將裡面的內容做歸納但不一定是計算總合
**本身的陣容都會複製一份不會被破壞**
**如果本身沒有回傳值,就會回傳一個空的陣列**

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