匿名函數 Anonymous Function

先前介紹的 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 這個變數無法被外部存取,但可在該匿名函數作用域內被存取。

(() => {})() 最後的 () 表示呼叫的意思,也就是宣告匿名函數後馬上呼叫的用法。