Alex Liang

[Javascript筆記] Anonymous Function

對一位C/C++ programmer來說,javascript的anonymous function(匿名者函式)是容易讓人困惑的存在。
如何使用沒有identifier的function? 有什麼好處? 在這裡做個筆記。

javascript提供3種宣告function的作法

Function Declarations

一般function的作法,需要提供function name,範例如下

1
2
3
4
5
function multiply(a, b) {
return a * b;
}

console.log(multiply(3, 4)); // Print 3 * 4

The Function() Constructor

類似C++的建構者函式 (constructor),只不過是用在function上

1
2
var mulitplyFunc = new Function("a", "b", "return a * b");
var x = mulitplyFunc(3, 4);

一般來說不建議用此方式宣告函式

Function Expressions

也就是這篇的主角,function expression不需要function name,可視為variable

1
2
var mulitplyFunc = function (a, b) { return a * b; };
var x = multiplyFunc(3, 4); // Calculate 3 * 4

使用anonymous function的好處

  1. 可用來實做Closure,實現design pattern的工廠方法
  2. 簡化程式碼,提高易讀性
    之前要用C++實作工廠方法時,需要dynamic binding的技術,確實要花點心思
    下一篇討論closure

參考來源:
Javascript function基本教學
關於lambda觀念的說明
比較ruby和js的anonymous function
Javascript function declarations vs function operators