# 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] ```