# JavaScript 函式重要概念:閉包、一級函式與高階函式 ## 閉包 - 閉包使可以從內部函式訪問外部函式的作用域的變數 - 閉包的作用: - 重複調用 - 獨立變數 - 隱藏變數 這個例子中,匿名函式會存取外部函式中的 originPrice,並保存其狀態。當呼叫 breadPrice 時,會以 originPrice 為基礎計算回傳值: ```javascript function discountTool(price) { const originPrice = price; return function (value) { return originPrice * value; }; } const breadPrice = discountTool(100); console.log(breadPrice(0.7)); // 70 ``` ## 一級函式 - 這是一個概念,並不局限於 JavaScript - 定義:當函式在該語言可以被視為與其它變數一樣時,就可以稱該語言具有一級函式 - 在 JavaScript 的案例 - 函式可以被賦值給變數(函式表達式) - 函式可以作為參數傳遞給其他函式 - 函式可以作為另一個函式的回傳值 ## 高階函式(技法) - 一樣是屬於一個概念,並不局限於 JavaScript - 定義: - 接受一個或多個函式作為參數 - 或是回傳一個函式作為結果 - 這兩個概念與上述所介紹的一級函式所提到的案例幾乎一致,不過一級函式是「函式可作為變數使用」;而高階函式是運用手法,將函式作為參數傳入或輸出 **函式可以作為參數來傳遞** ```javascript const arr = ["小明", "杰倫", "漂亮阿姨"]; // 等同於使用原生 forEach 方法 function fn(arr, callbackFunction) { for (let index = 0; index < arr.length; index++) { const element = arr[index]; callbackFunction(element, index); } } fn(arr, function (item, i) { console.log(item, i); }); arr.forEach((item, i) => { console.log(item, i); }); ``` **函式可以作為回傳值** ```javascript function fn() { return function () { console.log("這是回傳的函式"); }; } fn()(); ``` **參考資料** {%preview https://hackmd.io/@hexschool/rkEOZSJSi %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up