」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JavaScript 中的一等公民功能

JavaScript 中的一等公民功能

發佈於2024-11-02
瀏覽:922

Functions as First-Class Citizens in JavaScript

什麼是一等函數?

First-Class Citizens 意味著函數可以像其他資料類型一樣使用。它意味著函數可以分配給變量,作為參數傳遞給其他函數,並作為值返回。這是函數式程式設計中的關鍵概念,因為它允許我們編寫更多模組化和可重複使用的程式碼。

  • 分配給變數
  • 作為參數傳遞給其他函數
  • 從函數傳回作為值

以下是在 JavaScript 中使用函數作為一等公民的一些範例:

  • 將函數指派給變數: 您可以將函數指派給變數並像使用任何其他變數一樣使用這些變數。

例子:

const add = function(x, y) {
  return x   y;
}
console.log(add(5, 4)); // Output: 9
console.log(typeof(add)); // Output: function
  • 將函數作為參數傳遞: 您可以將函數作為參數傳遞給其他函數。這對於設計高階函數或回調函數很有用。

例子:

function greet(name, callback) {
  const message = "Hello, "   name   "!";
  callback(message);
}

function logMessage(message) {
  console.log(message); // Logs "Hello, Nozibul!"
}

greet("Nozibul", logMessage); // Logs "Hello, Nozibul!"
  • 將函數作為值傳回: 一個函數可以從內部傳回另一個函數。這對於建立可在後續操作中使用的函數非常有用,例如柯里化函數。

例子:

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

const addFive = add(5);
console.log(addFive(3)); // Output: 8
  • 在陣列中儲存函數: 函數可以像其他值一樣儲存在陣列中。

例子:

function add(a, b) {
  return a   b;
}

var arr = [];
arr.push(add);
console.log(arr); // Output: [ [Function: add] ]
console.log(arr[0](2, 5)); // Output: 7
  • 在物件中儲存函數: 函數可以儲存為物件的屬性。

例子:

function add(a, b) {
  return a   b;
}

var obj = {
  sum: add
};

console.log(obj.sum(5, 7)); // Output: 12
console.log(obj); // Output: { sum: [Function: add] }

這些範例示範如何將 JavaScript 中的函數視為一等公民,從而實現強大的函數式程式設計範例。

版本聲明 本文轉載於:https://dev.to/nozibul_islam_113b1d5334f/functions-as-first-class-citizens-in-javascript-4fji?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-04-17
  • C++中如何將獨占指針作為函數或構造函數參數傳遞?
    C++中如何將獨占指針作為函數或構造函數參數傳遞?
    在構造函數和函數中將唯一的指數管理為參數 unique pointers( unique_ptr [2啟示。通過值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法將唯一指針的所有權轉移到函數/對象。指針的內容被移至功能中,在操作...
    程式設計 發佈於2025-04-17
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-04-17
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-04-17
  • HTML格式標籤
    HTML格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2025-04-17
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在時間戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源於遺留實現的關注,這些限制需要對當前的_timestamp功能進行特定的實現。 創建表`foo`( `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-04-17
  • 在C#中如何高效重複字符串字符用於縮進?
    在C#中如何高效重複字符串字符用於縮進?
    在基於項目的深度下固定字符串時,重複一個字符串以進行凹痕,很方便有效地有一種有效的方法來返回字符串重複指定的次數的字符串。使用指定的次數。 constructor 這將返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.W...
    程式設計 發佈於2025-04-17
  • Maven快照在持續集成中的作用及使用
    Maven快照在持續集成中的作用及使用
    揭開Maven快照:連續集成的開發人員工具什麼是maven快照? maven快照版本是指在開發過程中不斷發展的依賴性。與被認為穩定和最終的“發行版”版本不同,快照被認為是“正在進行的工作”版本。它們代表了對項目或庫進行的最新更改。 實時更新:快照使開發人員可以立即訪問和集成對依賴關係的最新更改...
    程式設計 發佈於2025-04-17
  • 大型C++項目中如何識別和刪除冗餘#include指令?
    大型C++項目中如何識別和刪除冗餘#include指令?
    Identifying Redundant #include Directives in Extensive C ProjectsWorking with龐大的 C 項目時,開發者經常會遇到過多的 #include 指令,其中一些可能已成為程序中無必要的代碼。這些冗餘的指令可能會是代碼中的歷...
    程式設計 發佈於2025-04-17
  • Python元類工作原理及類創建與定制
    Python元類工作原理及類創建與定制
    python中的metaclasses是什麼? Metaclasses負責在Python中創建類對象。就像類創建實例一樣,元類也創建類。他們提供了對類創建過程的控制層,允許自定義類行為和屬性。 在Python中理解類作為對象的概念,類是描述用於創建新實例或對象的藍圖的對象。這意味著類本身是使用...
    程式設計 發佈於2025-04-17
  • 解決MySQL錯誤1153:數據包超出'max_allowed_packet'限制
    解決MySQL錯誤1153:數據包超出'max_allowed_packet'限制
    mysql錯誤1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的數據包,用於面對陰謀mysql錯誤1153,同時導入數據capase doft a Database dust?讓我們深入研究罪魁禍首並探索解決方案以糾正此問題。 理解錯誤此錯誤表明在導入過程中...
    程式設計 發佈於2025-04-17
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-04-17
  • 如何使用Depimal.parse()中的指數表示法中的數字?
    如何使用Depimal.parse()中的指數表示法中的數字?
    在嘗試使用Decimal.parse(“ 1.2345e-02”中的指數符號表示法表示的字符串時,您可能會遇到錯誤。這是因為默認解析方法無法識別指數符號。 成功解析這樣的字符串,您需要明確指定它代表浮點數。您可以使用numbersTyles.Float樣式進行此操作,如下所示:[&& && && ...
    程式設計 發佈於2025-04-17
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP將...
    程式設計 發佈於2025-04-17
  • 如何同步迭代並從PHP中的兩個等級陣列打印值?
    如何同步迭代並從PHP中的兩個等級陣列打印值?
    同步的迭代和打印值來自相同大小的兩個數組使用兩個數組相等大小的selectbox時,一個包含country代碼的數組,另一個包含鄉村代碼,另一個包含其相應名稱的數組,可能會因不當提供了exply for for for the uncore for the forsion for for ytry...
    程式設計 發佈於2025-04-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3