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

在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!

































































本章節帶你非常快速地了解條件控制、switch語句、迴圈控制,這些都是程式碼的核心概念。
這篇文章鉅細靡遺地介紹 JavaScript 中數字的各種特性和操作,涵蓋了基本運算符、類型轉換、位元運算、內建的數字方法和 Math 物件的常用函式等。文中包含多個程式碼範例幫助理解每個片段知識,有助於讀者完全理解和掌握 這些JavaScript 的重要基石。
Javascript 是一種程式語言,它的功能為"替網頁提供互動功能與動態行為",在本章節中,我將會完整且深入的解析 JavaScript 變數 (Variables) 與字串 (Strings),透過大量範例來強化理解與應用。
本章節不教新東西,這邊提供一個學習資源給各位。如果你看完了前面章節的教學,相信你對於網頁的基礎知識已經有一定程度的熟練,而如果要繼續進步,實際操作、多看其他人的程式碼都是很好的學習方式,所以推薦一個網站給想繼續精進的人。 freeCodeCamp是一個開放式學習平台,目前他有許多平台提供大家來學習。
5/5freeCodeCamp開放式免費學習平台
響應式設計是一種前端設計技術,用於讓網頁在不同裝置(例如:桌面、平板、手機)上顯示效果良好。 本章節將全面解析響應式設計(RWD),學習如何讓網頁適應不同裝置與螢幕大小,確保良好的使用者體驗。這些技術涵蓋 媒體查詢 、彈性佈局 、網格佈局,透過實作範例強化概念。
本章節將介紹 CSS 基本動畫 (CSS Animations),並透過 實作一個月球軌道旋轉效果,學習如何利用 CSS 動畫屬性 來創造流暢的視覺效果。 透過本章的實作,你將能夠運用 CSS 動畫技術 來打造 更生動、動態化的網頁元素,提升前端開發與 UI 設計能力!
本章節帶你非常快速地了解條件控制、switch語句、迴圈控制,這些都是程式碼的核心概念。
這篇文章鉅細靡遺地介紹 JavaScript 中數字的各種特性和操作,涵蓋了基本運算符、類型轉換、位元運算、內建的數字方法和 Math 物件的常用函式等。文中包含多個程式碼範例幫助理解每個片段知識,有助於讀者完全理解和掌握 這些JavaScript 的重要基石。
Javascript 是一種程式語言,它的功能為"替網頁提供互動功能與動態行為",在本章節中,我將會完整且深入的解析 JavaScript 變數 (Variables) 與字串 (Strings),透過大量範例來強化理解與應用。
本章節不教新東西,這邊提供一個學習資源給各位。如果你看完了前面章節的教學,相信你對於網頁的基礎知識已經有一定程度的熟練,而如果要繼續進步,實際操作、多看其他人的程式碼都是很好的學習方式,所以推薦一個網站給想繼續精進的人。 freeCodeCamp是一個開放式學習平台,目前他有許多平台提供大家來學習。
5/5freeCodeCamp開放式免費學習平台
響應式設計是一種前端設計技術,用於讓網頁在不同裝置(例如:桌面、平板、手機)上顯示效果良好。 本章節將全面解析響應式設計(RWD),學習如何讓網頁適應不同裝置與螢幕大小,確保良好的使用者體驗。這些技術涵蓋 媒體查詢 、彈性佈局 、網格佈局,透過實作範例強化概念。
本章節將介紹 CSS 基本動畫 (CSS Animations),並透過 實作一個月球軌道旋轉效果,學習如何利用 CSS 動畫屬性 來創造流暢的視覺效果。 透過本章的實作,你將能夠運用 CSS 動畫技術 來打造 更生動、動態化的網頁元素,提升前端開發與 UI 設計能力!
你可能也想看
Google News 追蹤
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行
前言: 一直想要把自己的學習筆記整理整理,至少在寫下筆記的時候,也能釐清觀念。 結果拖延到現在,終於要提筆了,不知道能堅持多久(???)。
Thumbnail
針對 JavaScript 中的原始型別和隱性轉型進行了詳細的探討
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
主要來講宣告函式跟箭頭函式 : 宣告函式(Function Declaration) 語法: function functionName(parameters) { return result; } 特點: 使用 function 關鍵字 函式名稱是必需的 存在函式
Thumbnail
在這一章中,我們探討了 PHP 中的函數,包括函數的基本結構、不同的函數定義方式(如函數聲明、函數表達式、箭頭函數和匿名函數)以及如何呼叫函數。我們還討論了函數的參數處理方式,包括單個參數、多個參數、預設參數值和剩餘參數。此外,我們還介紹了函數的返回值,包括返回單個值、返回物件和返回函數的情況。
Thumbnail
本章節主要介紹Java語言中的函數(也稱為方法)的使用,包括函數的基本結構、函數表達式(Lambda表達式)、箭頭函數、匿名函數的使用,以及如何呼叫函數、如何使用函數參數和函數的返回值等內容。通過學習本章節,讀者將能夠熟練掌握Java語言中的函數相關知識,並能夠在實際編程中靈活運用。
Thumbnail
本章節旨在介紹TypeScript中的函數,包括其基本結構、如何呼叫函數、函數的參數以及函數的返回值等相關概念。通過本章節,讀者可以學習到如何在TypeScript中使用不同的方式來定義函數,如函數聲明、函數表達式、箭頭函數和匿名函數等。
Thumbnail
本章節旨在介紹TypeScript的基本語法,包括一般結構、程式進入點、註解以及變數的定義和賦值。這些知識將幫助讀者瞭解TypeScript的基本架構,並且可以開始使用TypeScript進行開發。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
※ 函式基礎介紹: ※ JavaScript 特殊的函式特性: 函式可以當成值來傳遞 (可以放進變數或放進物件) 函式可以當成函式的參數 callback - 在特定事件中觸發函式 (非同步特性) ※ 函式的基本寫法: ※ 調用 (invoke) 函式: "調用" 意指呼叫或執行
前言: 一直想要把自己的學習筆記整理整理,至少在寫下筆記的時候,也能釐清觀念。 結果拖延到現在,終於要提筆了,不知道能堅持多久(???)。
Thumbnail
針對 JavaScript 中的原始型別和隱性轉型進行了詳細的探討