Skip to content

函式

在 JavaScript 中,函式是一個執行特定任務或計算值的代碼區塊。函式的靈活性和強大功能使它成為 JavaScript 中非常重要的一部分。以下是有關 JavaScript 函式的詳細語法說明。

1. 函式的基本宣告

使用 function 關鍵字來宣告函式,並給它一個名稱。

function functionName(parameters) {
    // 函式內的程式碼
    return value; // (可選)返回一個值
}
範例:
function greet(name) {
    return "Hello, " + name;
}

let message = greet("Alice"); // "Hello, Alice"

2. 函式參數與回傳值

  • 參數:函式可以接受零個或多個參數,這些參數在函式內部用來處理數據。
  • 回傳值:使用 return 關鍵字返回一個值。一旦執行到 return,函式會停止運行並返回該值。 範例:
    function add(a, b) {
        return a + b;
    }
    
    let sum = add(5, 3); // 8
    

3. 匿名函式

匿名函式(Anonymous Function)是沒有名稱的函式,通常用於一次性的執行或作為其他函式的參數。

let sum = function(a, b) {
    return a + b;
};

console.log(sum(10, 5)); // 15

4. 箭頭函式(Arrow Function)

箭頭函式是 ES6 引入的一種更簡潔的函式語法,特別適用於簡短的函式。

const functionName = (parameters) => {
    // 函式內的程式碼
    return value; // (可選)返回一個值
};
範例:
const greet = (name) => "Hello, " + name;

console.log(greet("Bob")); // "Hello, Bob"
如果箭頭函式只有一個參數和一行返回語句,可以省略括號和 return 關鍵字:
const square = x => x * x;

console.log(square(4)); // 16

5. 函式表達式

函式可以作為一個表達式來使用,並賦值給變數。這種方式可以用於創建匿名函式。

const multiply = function(a, b) {
    return a * b;
};

console.log(multiply(4, 5)); // 20

6. 立即執行函式表達式(IIFE)

立即執行函式表達式(Immediately Invoked Function Expression, IIFE)是一種特殊的匿名函式,會立即執行。通常用於避免污染全局作用域。

(function() {
    console.log("This is an IIFE");
})();

7. 高階函式(Higher-Order Function)

高階函式是可以接受函式作為參數,或返回一個函式的函式。這種函式在 JavaScript 中非常強大,常用於回調(callback)和函式組合。

範例:

function performOperation(a, b, operation) {
    return operation(a, b);
}

function add(x, y) {
    return x + y;
}

function multiply(x, y) {
    return x * y;
}

console.log(performOperation(3, 4, add)); // 7
console.log(performOperation(3, 4, multiply)); // 12

8. 函式的默認參數

ES6 引入了默認參數功能,允許在函式定義時為參數指定默認值。如果函式調用時未傳遞該參數,則使用默認值。

function greet(name = "Guest") {
    return "Hello, " + name;
}

console.log(greet()); // "Hello, Guest"
console.log(greet("Alice")); // "Hello, Alice"

9. Rest 參數

Rest 參數(...)允許函式接受不定數量的參數,並將它們作為一個陣列提供給函式。

function sum(...numbers) {
    return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4)); // 10

10. 函式的作用域(Scope)與閉包(Closure)

  • 作用域:函式內部變數的可見性和存取範圍。JavaScript 中有全域作用域和區域(函式)作用域。
  • 閉包:當函式內部的函式(內嵌函式)引用了外部函式的變數時,形成閉包。

範例:

function outerFunction(outerVariable) {
    return function innerFunction(innerVariable) {
        console.log("Outer Variable: " + outerVariable);
        console.log("Inner Variable: " + innerVariable);
    };
}

const newFunction = outerFunction("outside");
newFunction("inside");
// Outer Variable: outside
// Inner Variable: inside

11. 箭頭函式與 this 關鍵字

箭頭函式不綁定自己的 this,它會捕捉到定義它的上下文中的 this 值,這對於處理 this 在回調函式中的行為非常有用。

範例:

function Timer() {
    this.seconds = 0;
    setInterval(() => {
        this.seconds++;
        console.log(this.seconds);
    }, 1000);
}

let timer = new Timer();
// 每秒鐘輸出一次秒數

12. 生成器函式

生成器函式是 ES6 引入的一種特殊函式,使用 function* 定義。生成器函式可以在執行過程中暫停和繼續。

function* generatorFunction() {
    yield 1;
    yield 2;
    yield 3;
}

const generator = generatorFunction();
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
console.log(generator.next().value); // 3

13. 遞歸函式

遞歸函式是指函式自己調用自己,通常用於處理像樹結構、數學計算(如費氏數列、階乘)等問題。

範例:

function factorial(n) {
    if (n === 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

console.log(factorial(5)); // 120

這些是 JavaScript 中函式相關的主要語法和概念。理解這些內容將有助於你有效地編寫和理解 JavaScript 程式碼。