先前介紹的 Function 都是需要賦予一個名稱,叫做具名函數。
而匿名函數剛好與之相反,不需要給予名稱。
用途
- 一次性呼叫
- 作用域保護 (Closure)
一次性呼叫
例如事件綁定時,需要給予一個 callback 參數,大部分這個 callback 參數都是為了此次事件綁定而產生,為此宣告具名函數,並不是那麼恰當。
$('#btn').on('click', () => {
console.log('Click Me!')
})
如果使用具名函數,則為
const buttonBeClick = () => {}
$('#btn').on('click', buttonBeClick)
這邊會有幾個問題
- 須思考具名函數名稱
- 此具名函數並無重複使用需求
- 綁定時容易造成語法上誤解
const buttonBeClick = () => {}
$('#btn').on('click', buttonBeClick())
作用域保護 (Closure)
當有變數不想被外部存取的需求時,使用匿名函數做封裝也是不錯的做法。
透過作用域 Scope 的特性,將變數封裝進一個匿名函數內,可以在內部調用,卻又可以保護該變數不被外部存取。
(() => {
let active = '';
$('.radio').on('click', (e) => {
let target = $(e.target);
active = target.val();
})
})()
上面範例,active 這個變數無法被外部存取,但可在該匿名函數作用域內被存取。
(() => {})()
最後的 ()
表示呼叫的意思,也就是宣告匿名函數後馬上呼叫的用法。