函式

更新於 2024/07/29閱讀時間約 3 分鐘

函式最基本的形式長這樣 :

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

這個函式接受一個參數name,並返回一個問候語。您可以這樣調用它

console.log(greet("Alice")); // 輸出: Hello, Alice!


接下來講宣告函式跟箭頭函式,函式的宣告方式會影響 this 的指向 :

  1. 宣告函式(Function Declaration)

語法:

function functionName(parameters) {

return result;
}

特點:

  • 使用 function 關鍵字
  • 函式名稱是必需的
  • 存在函式提升(hoisting)
  • 有自己的 this 綁定

例子:

function greet(name) {
return `Hello, ${name}!`;
}

console.log(greet("Alice")); // 輸出: Hello, Alice!


  1. 箭頭函式(Arrow Function)

箭頭函式是 ES6 引入的簡潔函式語法。

語法:

const functionName = (parameters) => {

return result;
};

特點:

  • 使用 => 符號
  • 通常賦值給變數
  • 沒有自己的 this,繼承外圍作用域的 this

例子:

const greet = (name) => `Hello, ${name}!`;

console.log(greet("Bob")); // 輸出: Hello, Bob!


主要區別:

this 綁定:

  • 有自己的 this 綁定,根據調用方式決定
  • 箭頭函式沒有自己的 this,使用外圍作用域的 this

函式提升:

  • 宣告函式會被提升
  • 箭頭函式不會被提升

使用情況:

  • 宣告函式適用於需要自己的 this 的情況
  • 箭頭函式適用於簡短的函式表達式,特別是在回調函式中


以下有兩個例子,都是關於this的指向性

// 宣告函式
const obj1 = {
name: "Object 1",
greet: function() {
console.log(`Hello from ${this.name}`);
}
};

// 箭頭函式
const obj2 = {
name: "Object 2",
greet: () => {
console.log(`Hello from ${this.name}`);
}
};

obj1.greet(); // 輸出: Hello from Object 1
obj2.greet(); // 輸出: Hello from undefined (因為箭頭函式沒有自己的 this)


總結:

  • 宣告函式的 this 是動態綁定的,取決於函式如何被調用。
  • 箭頭函式的 this 是靜態的,在函式創建時就確定了,它繼承自外層作用域的 this


參考資料 :
iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)










    avatar-img
    3會員
    17內容數
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    郭欣玫的沙龍 的其他內容
    就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
    一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
    今天要來討論 1 + "1" 。 如果當兩個操作數都是數字時,+ 會執行數字相加。例如,1 + 1 結果是 2。 那如果是"1"+"1",就變成字符串相加變成11。 那我們今天要講的是1 + "1",答案是11,為甚麼呢? 這是一個類型強制轉換,今天當 + 遇到不一樣的類型時,JavaScrip
    首先要安裝vscode : Visual Studio Code - Code Editing. Redefined 安裝後我們就可以把她打開來,接著去檔案 -> 喜好設定 -> 設定檔(預設) -> 你就會看到設定裡面的 settings.json,就可以開始你的設定拉(主要是依照個人的喜好設定
    pure function 是甚麼呢? 最主要兩大特點 : 淺顯易懂的說法就是 : 對於有相同的輸入,就會有相同的輸出。 無副作用 : 不會去修改或依賴外部的狀態。 舉一個例子 : function add(a, b) { return a + b; } function裡面他帶入的
    Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
    就是指變數可以被訪問和使用的範圍,來說一下var、let和const的作用域差異。 var :function example() { console.log(x); // 輸出: undefined 因為變量提升造成的 var x = 5; } 函數作用域或全域作用域 可以重複宣告
    一開始你先把你的專案push上去後,修改vite.config.ts ,要在裡面新增  base: "/Cart/" (/放自己的專案名稱/) build: {outDir: "docs"}, 接下來你要去你的github setting 裡面 -> Page ->選Deploy fro
    今天要來討論 1 + "1" 。 如果當兩個操作數都是數字時,+ 會執行數字相加。例如,1 + 1 結果是 2。 那如果是"1"+"1",就變成字符串相加變成11。 那我們今天要講的是1 + "1",答案是11,為甚麼呢? 這是一個類型強制轉換,今天當 + 遇到不一樣的類型時,JavaScrip
    首先要安裝vscode : Visual Studio Code - Code Editing. Redefined 安裝後我們就可以把她打開來,接著去檔案 -> 喜好設定 -> 設定檔(預設) -> 你就會看到設定裡面的 settings.json,就可以開始你的設定拉(主要是依照個人的喜好設定
    pure function 是甚麼呢? 最主要兩大特點 : 淺顯易懂的說法就是 : 對於有相同的輸入,就會有相同的輸出。 無副作用 : 不會去修改或依賴外部的狀態。 舉一個例子 : function add(a, b) { return a + b; } function裡面他帶入的
    Node.js是一個JavaScript運行環境。它使用了一個非阻塞、事件驅動的I/O模型,使其非常適合用於數據密集型的即時應用程序。簡單來說,Node.js允許你使用JavaScript來編寫伺服器端代碼。 nvm 安裝nvm Windows : 點擊 Releases · coreybut
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    圓形花圈中間放個香氛蠟燭,就可以吃燭光晚餐囉!
    Thumbnail
    Biedermeier的中文翻譯有非常多種,畢德麥亞、畢德邁爾、畢德麥雅…等等。外型討喜,運用的場合很廣泛。
    Thumbnail
    無需花器,送禮自用兩相宜的手提花束。
    Thumbnail
    器具:花籃、海綿、玻璃紙、花剪、水果刀。 花材:桔梗(粉紫、黃色、白色)、小手球、小太陽、萬岱蘭、中康、小黃菊、一點紅、西維亞。
    Thumbnail
    今天的作品是古典花型,強調線條的美感。 器具:日式冠軍杯、海綿、花材剪、水果刀。 花材:紫桔梗、火鶴、白藜麥、多瓣百合(又名玫瑰百合)、巴西木葉、白色金魚草、粉紫雲南菊。
    Thumbnail
    今天上了第一堂的插花課,主題是『錐形架構』。
    Thumbnail
    上次二月份來釜山,有計畫要吃炸雞配啤酒 但是每天都吃很飽,錯過韓式炸雞餐 這次說什麼都要吃到 今晚入住的飯店附近很多吃的 晚餐剛好是自理餐,可以吃炸雞了 原本的目標是橋村炸雞 但是這裡沒有橋村,打開地圖有很多間四星評論炸雞 結果網路不給力,無法規劃路線 我跟旅伴在熱鬧的街上問了路人
    函式跟資料結構一樣都有類型,它不只是特定於函式的概念,而是跟int, tuple<bool,float>等類型同等的概念。在c++函式的類型可以寫做如std::function<int(float,float)>,它可以放在tuple, array等容器裡,當然也可以作為函式的參數或是傳回值,如st
    前幾篇文章在討論類型時,只討論了乘法與加法類型,這只是最基礎的類型構造方式,另外還有函式類型和泛型等概念還沒討論。在討論函式的類型之前,必須先討論函式的正確用法。對於程序式編程來說,函式是一段可重複使用的執行代碼,輸入的參數是用來控制執行行為的,因此比起函式(function)更應該稱它為程序(pr
    Thumbnail
    韓式人參雞湯未解之謎: 你覺得呢? ==================== 以下是韓式人參雞湯未解之謎的感應, 僅供參考,信不信就隨你了。 ==================== 問題: 韓式人參雞湯好嗎? 這是網友私下付費問我的, 他說可以分享給網友看。 韓式人參雞湯,反正
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    圓形花圈中間放個香氛蠟燭,就可以吃燭光晚餐囉!
    Thumbnail
    Biedermeier的中文翻譯有非常多種,畢德麥亞、畢德邁爾、畢德麥雅…等等。外型討喜,運用的場合很廣泛。
    Thumbnail
    無需花器,送禮自用兩相宜的手提花束。
    Thumbnail
    器具:花籃、海綿、玻璃紙、花剪、水果刀。 花材:桔梗(粉紫、黃色、白色)、小手球、小太陽、萬岱蘭、中康、小黃菊、一點紅、西維亞。
    Thumbnail
    今天的作品是古典花型,強調線條的美感。 器具:日式冠軍杯、海綿、花材剪、水果刀。 花材:紫桔梗、火鶴、白藜麥、多瓣百合(又名玫瑰百合)、巴西木葉、白色金魚草、粉紫雲南菊。
    Thumbnail
    今天上了第一堂的插花課,主題是『錐形架構』。
    Thumbnail
    上次二月份來釜山,有計畫要吃炸雞配啤酒 但是每天都吃很飽,錯過韓式炸雞餐 這次說什麼都要吃到 今晚入住的飯店附近很多吃的 晚餐剛好是自理餐,可以吃炸雞了 原本的目標是橋村炸雞 但是這裡沒有橋村,打開地圖有很多間四星評論炸雞 結果網路不給力,無法規劃路線 我跟旅伴在熱鬧的街上問了路人
    函式跟資料結構一樣都有類型,它不只是特定於函式的概念,而是跟int, tuple<bool,float>等類型同等的概念。在c++函式的類型可以寫做如std::function<int(float,float)>,它可以放在tuple, array等容器裡,當然也可以作為函式的參數或是傳回值,如st
    前幾篇文章在討論類型時,只討論了乘法與加法類型,這只是最基礎的類型構造方式,另外還有函式類型和泛型等概念還沒討論。在討論函式的類型之前,必須先討論函式的正確用法。對於程序式編程來說,函式是一段可重複使用的執行代碼,輸入的參數是用來控制執行行為的,因此比起函式(function)更應該稱它為程序(pr
    Thumbnail
    韓式人參雞湯未解之謎: 你覺得呢? ==================== 以下是韓式人參雞湯未解之謎的感應, 僅供參考,信不信就隨你了。 ==================== 問題: 韓式人參雞湯好嗎? 這是網友私下付費問我的, 他說可以分享給網友看。 韓式人參雞湯,反正