JavaScript Function Definitions

 

一、Function Declaration

一個 Function Declaration 例子如下

function myFunction(a, b) {
    return a * b;
}

由於 Function Declaration 不是立刻執行陳述句,所以其結尾不需加「;」號。

一個 Function Declaration 需要有一個 function name。

 

二、Function Expression

一個 Function Expression 例子如下

var x = function (a, b) { return a * b };

也等於

var x = function multiple(a, b) { return a * b };

Function Declaration 跟 Function Expression 的差別在於有沒有加「;」號與將其指定到變數。

 

三、Function Constructor

一個 Function Constructor 例子如下

var myFunction = new Function("a", "b", "return a * b");

黃色框都是關鍵字。

 

四、Function Hoisting

Hoisting is JavaScript's default behavior of moving declarations to the top of the current scope.

一個 Function Hoisting 例子如下

myFunction(5);
function myFunction(y) {
    return y * y;
}

 

五、Self-Invoking Function

Self-Invoking Function 形式如下,注意括號 (parenthese) 的擺放

(function print() { console.log("hello") })();
(function print() { console.log("hello") }());
(function () { console.log("hello") }());
(function () { console.log("hello") })();

以上四個例子結果皆相等。

Self-Invoking Function 可以不需要 function name。

Self-Invoking Function 也可以指的是 Immediately-invoked function expression (IIFE)。

 

六、Arrow Function

// ES5
var a = function (x, y) {
    return x * y;
}
// ES6
var b = (x, y) => x * y;

1、Arrow Function 是 ES6 語法。

2、Arrow Function 是 Function Expression 的簡化語法。

3、由上例子可知道 Arrow Function 簡化 function 關鍵字、return 關鍵字、大括號 (curly brackets)。

4、Arrow Function 不能使用 this 關鍵字

var o = {
    myvalue: 3,
    sum: (x, y) => x * y + this.myvalue
};
o.sum(2, 3);

5、Arrow Function 不支援 Function Hoisting

b(2, 3);
var b = (x, y) => x * y;

6、Arrow Function 也可以擁有 return 關鍵字、大括號 (curly brackets)。

var b = (x, y) => { return x * y };