Function

函式是一段可以被其他程式碼或自身呼叫的程式碼片段,或者是一個引用函式的變數。當函式被呼叫時,引數作為輸入傳遞給函式,函式可以選擇性地返回一個值。JavaScript 中的函式也是一個物件

函式名是函式宣告或函式表示式的一部分,是一個識別符號。函式名的作用域取決於函式名是宣告還是表示式。

不同型別的函式

匿名函式是沒有函式名的函式。只有函式表示式可以是匿名的,函式宣告必須有名字。

js
// Anonymous function created as a function expression
(function () {});

// Anonymous function created as an arrow function
() => {};

以下術語並未在 ECMAScript 語言規範中使用,它們是用來指代不同型別函式的行話。

命名函式是帶有函式名的函式。

js
// Function declaration
function foo() {}

// Named function expression
(function bar() {});

// Arrow function
const baz = () => {};

內部函式是另一個函式內部的函式(本例中為 square)。外部函式是包含函式的函式(本例中為 addSquares)。

js
function addSquares(a, b) {
  function square(x) {
    return x * x;
  }
  return square(a) + square(b);
}

// Arrow function
const addSquares2 = (a, b) => {
  const square = (x) => x * x;
  return square(a) + square(b);
};

遞迴函式是呼叫自身的函式。參見遞迴

js
function loop(x) {
  if (x >= 10) return;
  loop(x + 1);
}

// Arrow function
const loop2 = (x) => {
  if (x >= 10) return;
  loop2(x + 1);
};

立即呼叫函式表示式 (IIFE) 是一個在函式載入到瀏覽器編譯器後立即被呼叫的函式。識別 IIFE 的方法是找到函式定義末尾額外的左右括號。

函式表示式,無論命名與否,都可以立即呼叫。

js
(function foo() {
  console.log("Hello Foo");
})();

(function food() {
  console.log("Hello Food");
})();

(() => console.log("hello world"))();

宣告的函式不能以這種方式立即呼叫,因為 IIFE 必須是函式表示式

js
function foo() {
  console.log("Hello Foo");
}();

如果您想了解更多關於 IIFE 的資訊,請檢視維基百科上的以下頁面:立即呼叫函式表示式

另見