JS-4: 函數全解析

更新於 發佈於 閱讀時間約 7 分鐘

函數是可重複使用的程式碼區塊,用於執行特定任務或計算,你可以將它視為機器,它可以接受一些變數作為參數,並對其進行一些操作,接著產生輸出。

基本函數宣告語法

function functionName(parameters) {
// 函式內容
return value; // 可選,回傳值,如果沒有的話,預設會傳回 undefined
}

範例:

function greet() {
console.log("Hello");
}
greet() //呼叫函數,輸出 "Hello"

範例二:

// 傳入參數的函數
function greet(name) {
return `Hello, ${name}!`;
}

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

我們也可以替參數設置默認值,如果調用函數時沒有提供參數,則使用這些默認值。

function mystery(a, b = 3) {
return a * b;
}
console.log(mystery(4)); // 12
console.log(mystery(4, 4)); // 16
  • 習慣上會將可有可無的參數設定默認值,並且將其放置在參數列的最後,以避免遇到錯誤。

箭頭函數

更簡潔的函數語法。像是將函數作為表達式賦值給變數。

語法:

const functionName = (parameters) => {
// 函數內容
return value; // 可選
};

範例:

const multiply = (a, b) => a * b;

console.log(multiply(4, 5)); // 20
  • 當只有一個參數時,括號可以省略:x => x * x
  • 當函數內容只有單行回傳值時,{}括號和 return 可以省略。

好,這邊我要提到一個觀念: 作用域(Scope),其是指變數、函式或物件在程式中的可見範圍和存取範圍。理解作用域是掌握程式設計中變數生命週期與可訪問性的重要基礎。

  1. 全域作用域(Global Scope)
  • 在程式的最外層定義的變數或函數屬於全域作用域。
  • 全域作用域中的變數可以在程式的任何地方存取。

範例:

let globalVar = "I am global";

function showGlobal() {
console.log(globalVar); // 可存取 globalVar
}

showGlobal(); // "I am global"
console.log(globalVar); // "I am global"
  1. 函數作用域(Function Scope)
  • 在函數內部定義的變數僅能在函數內存取,函數外無法訪問。

範例:

const myFunction = () => {
let localVar = "I am local";
console.log(localVar); // "I am local"
}

myFunction();
//console.log(localVar); // 錯誤:localVar is not defined

不過若是在函數內部定義一個同名變數,則以函數作用域的變數優先。

let Var = "I am global";

const myFunction = () => {
let Var = "I am local";
console.log(Var); // "I am local"
}
myFunction();
console.log(Var);
/* 輸出
I am local
I am global
*/

另外,請觀察以下程式碼:

if (true) {
let blockVar = "Hello";
}
console.log(blockVar); // ReferenceError: blockVar is not defined
  • 會拋出 ReferenceError: blockVar is not defined,主要原因是 let 具有 區塊作用域 (block scope),而變數 blockVarif 區塊內聲明,導致它無法在區塊外部存取。

在 JavaScript 中,letconst 宣告的變數 只在其所在的區塊 (block) 內有效,而區塊指的是用 {} 包起來的程式碼範圍,例如 ifforwhile 或一般 {}

在本例子中,變數 blockVar 只在 if 區塊 { } 內有效,當 console.log(blockVar); 嘗試在區塊外存取 blockVar 時,因為變數作用範圍已經結束,所以拋出 ReferenceError

相較之下,var 沒有區塊作用域,只有函式作用域。如果改用 var,變數就能夠在區塊外存取:

if (true) {
var blockVar = "Hello"; // `var` 沒有區塊作用域
}
console.log(blockVar); // "Hello"
  • 這是因為 var 會提升 (hoist) 到最接近的函式作用域內,所以它即使是在 if 區塊內宣告,仍然能夠在 if 外部存取。

簡單解釋 var 的 Hoisting

function example() {
console.log(a); // undefined (變數已提升,但未賦值)
var a = 10;
console.log(a); // 10
}
example();

發生了什麼?

  1. JavaScript 會把 var a 提升到函式的最上方,但 不會提升賦值部分,所以第一個 console.log(a); 會印出 undefined,而不是錯誤。
  2. 真正執行的程式碼等價於:
    javascript複製編輯function example() {
    var a; // 變數提升 (Hoisting)
    console.log(a); // undefined
    a = 10; // 賦值
    console.log(a); // 10
    }
  3. 這就是為什麼 var 可以在宣告前使用,但只會是 undefined,因為它 只有變數名稱被提升

而Hoisting 在 if{} 內的影響:

if (true) {
var x = 100;
}
console.log(x); // 100 (因為 `var` 沒有區塊作用域)

等價於:

var x; // 提升到最上方
if (true) {
x = 100;
}
console.log(x); // 100

不過,現代 JavaScript 幾乎不用 var(其行為容易導致錯誤),主要是用 letconst

留言
avatar-img
留言分享你的想法!
avatar-img
電資鼠 - 您的學習好夥伴
9會員
215內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/03
本章節你將了解 日期物件,包括處理日期的方法以及如何設定日期格式,切入要點的示範所有常見的使用方法範例與應用。
Thumbnail
2025/03/03
本章節你將了解 日期物件,包括處理日期的方法以及如何設定日期格式,切入要點的示範所有常見的使用方法範例與應用。
Thumbnail
2025/03/03
表單驗證是一個在用戶輸入資料時確保其正確性、完整性及格式符合要求的重要功能,它可以在用戶提交表單之前進行檢查,防止錯誤資料的傳輸。本章節將帶你初步了解其原理與使用。
2025/03/03
表單驗證是一個在用戶輸入資料時確保其正確性、完整性及格式符合要求的重要功能,它可以在用戶提交表單之前進行檢查,防止錯誤資料的傳輸。本章節將帶你初步了解其原理與使用。
2025/03/03
本篇文章深入淺出地介紹 JavaScript 正規表達式,從基本語法、常用符號、方法應用到進階的捕獲群組、斷言等,並搭配豐富的範例程式碼,幫助讀者快速掌握正規表達式的使用技巧。
2025/03/03
本篇文章深入淺出地介紹 JavaScript 正規表達式,從基本語法、常用符號、方法應用到進階的捕獲群組、斷言等,並搭配豐富的範例程式碼,幫助讀者快速掌握正規表達式的使用技巧。
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
此章節旨在介紹Java的基本語法、註解和變數的使用。透過學習,讀者將了解Java程式的基本結構、程式進入點的定義、如何撰寫單行和多行註解,以及如何宣告和初始化變數。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
這些章節的目的是為了介紹JavaScript中的各種數據類型,包括基礎類型和物件類型,以及如何將數據從一種類型轉換為另一種類型。此外,還介紹了如何創建自定義類型,以及如何使用JavaScript中的陣列、集合和字典。
Thumbnail
這些章節的目的是為了介紹JavaScript中的各種數據類型,包括基礎類型和物件類型,以及如何將數據從一種類型轉換為另一種類型。此外,還介紹了如何創建自定義類型,以及如何使用JavaScript中的陣列、集合和字典。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
Thumbnail
本章節旨在介紹 C# 中函數的基本結構,包括訪問修飾符、返回類型、方法名稱、參數列表和方法體。同時,也介紹了函數的各種呼叫方式、參數傳遞方式和返回值類型。讀者可以通過本章節,深入理解 C# 中函數的使用和應用。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News