JavaScript - 智能函數參數

你好,未來的 JavaScript 巫師們!今天,我們將踏上一段令人興奮的旅程,進入智能函數參數的世界。作為你們親切鄰居的電腦老師,我在這裡用清晰易懂的解釋和大量的範例來引導你們。所以,拿起你們的虛擬魔杖(鍵盤),我們一起來探索吧!

JavaScript - Smart Function Parameters

預設函數參數

預設參數是什麼?

想像一下你正在訂購披薩。你可能會說,“我想要一個大型的辣腸披薩。”但如果你沒有指定大小呢?如果披薩店假設你想要一個中型的會不會很棒?這正是 JavaScript 函數中的預設參數的作用!

預設參數讓我們能夠為函數參數指定預設值。如果沒有提供參數或者參數是 undefined,則會使用預設值。

我們來看一個簡單的例子:

function greet(name = "friend") {
console.log(`Hello, ${name}!`);
}

greet(); // 輸出: Hello, friend!
greet("Alice"); // 輸出: Hello, Alice!

在這個例子中,如果沒有提供名稱,函數會使用 "friend" 作為預設。就像有一個友好的機器人在不知道你的名字時會說 "Hello, friend!"!

更複雜的預設參數

預設參數可以不僅僅是簡單的值。它們可以是表達式,甚至是函數調用。我們來看一個更進階的例子:

function calculateArea(length, width = length) {
return length * width;
}

console.log(calculateArea(5)); // 輸出: 25
console.log(calculateArea(5, 3)); // 輸出: 15

在這裡,如果沒有提供寬度,它會使用長度作為預設。這對於計算正方形(長度等於寬度)或矩形的面積來說非常完美!

JavaScript 剩餘參數

剩餘參數是什麼?

剩餘參數就像一個神奇的袋子,可以裝任何數量的物品。在 JavaScript 中,它讓函數能夠接受不定數量的參數作為一個數組。

我們來看看它是如何工作的:

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

console.log(sum(1, 2, 3)); // 輸出: 6
console.log(sum(1, 2, 3, 4, 5)); // 輸出: 15

在這個例子中,...numbers 是我們的神奇袋子。它可以裝任何數量的參數,我們可以在函數內將其作為數組來使用。

結合剩餘參數與常規參數

我們也可以將剩餘參數與常規參數一起使用:

function introduce(greeting, ...names) {
names.forEach(name => console.log(`${greeting}, ${name}!`));
}

introduce("Hello", "Alice", "Bob", "Charlie");
// 輸出:
// Hello, Alice!
// Hello, Bob!
// Hello, Charlie!

在這裡,greeting 是一個常規參數,而 ...names 捕獲其餘的參數。

JavaScript 解構或命名參數

解構是什麼?

解構就像打開一個行李箱。我們不必一個一個地取出物品,而是一次性取出多個物品並給它們命名。

我們來看一個對象解構的例子:

function printUserInfo({ name, age, city = "Unknown" }) {
console.log(`Name: ${name}, Age: ${age}, City: ${city}`);
}

const user = { name: "Alice", age: 30 };
printUserInfo(user); // 輸出: Name: Alice, Age: 30, City: Unknown

const anotherUser = { name: "Bob", age: 25, city: "New York" };
printUserInfo(anotherUser); // 輸出: Name: Bob, Age: 25, City: New York

在這個例子中,我們正在解構傳遞給函數的對象,提取 nameagecity(有一個預設值)。

數組解構

我們也可以使用數組解構:

function getFirstAndLast([first, ...rest]) {
return { first, last: rest.pop() };
}

const result = getFirstAndLast(["Apple", "Banana", "Cherry", "Date"]);
console.log(result); // 輸出: { first: "Apple", last: "Date" }

這個函數接受一個數組,提取第一個元素,並使用剩餘參數來獲取最後一個元素。

結合解構與預設和剩餘參數

現在,讓我們把我們學到的所有概念結合到一個超級智能的函數中:

function createTeam({ leader, members = [], maxSize = 5 } = {}) {
const team = [leader, ...members].slice(0, maxSize);
console.log(`Team created with ${team.length} members.`);
console.log(`Leader: ${leader}`);
console.log(`Other members: ${members.join(", ") || "None"}`);
}

createTeam({ leader: "Alice", members: ["Bob", "Charlie"] });
// 輸出:
// Team created with 3 members.
// Leader: Alice
// Other members: Bob, Charlie

createTeam({ leader: "David" });
// 輸出:
// Team created with 1 members.
// Leader: David
// Other members: None

createTeam();
// 輸出:
// Team created with 0 members.
// Leader: undefined
// Other members: None

這個函數使用對象解構並有預設值,甚至在一個參數都沒有傳遞時還有一個預設的空對象!

方法總結

這裡是一個我們已經涵蓋的方法總結表:

方法 描述 範例
預設參數 為函數參數提供預設值 function greet(name = "friend")
剩餘參數 捕獲不定數量的參數作為數組 function sum(...numbers)
對象解構 從傳遞的對象中提取屬性 function printUserInfo({ name, age })
數組解構 從傳遞的數組中提取元素 function getFirstAndLast([first, ...rest])

親愛的學生們,這就是 JavaScript 中智能函數參數的神奇世界。記住,這些技巧就像是你的編程工具箱中的工具。你越多練習使用它們,它們就會變得越自然。所以,勇往直前,創造一些智能、靈活且強大的函數吧!快樂編程!??

Credits: Image by storyset