」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 每個 Node 開發人員都必須掌握的 JavaScript 概念

每個 Node 開發人員都必須掌握的 JavaScript 概念

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

Node.js 因其在后端利用 JavaScript 的能力而迅速成为构建 Web 应用程序和系统软件的标准。 Express 等流行框架和 Webpack 等工具有助于其广泛使用。尽管存在 DenoBun 等竞争对手,Node 仍然是领先的服务器端 JavaScript 平台。

JavaScript 的多范式性质允许各种编程风格,但它也带来了范围和对象突变等风险。缺乏尾部调用优化使得大型递归迭代变得危险,并且 Node 的单线程架构需要异步代码来提高效率。尽管面临挑战,但遵循 JavaScript 中的关键概念和最佳实践可以帮助 Node.js 开发人员编写可扩展且高效的代码。

1。 JavaScript 闭包

JavaScript 中的闭包是一个内部函数,即使在外部函数返回控制权之后,它也可以访问其外部函数的作用域。闭包使内部函数的变量成为私有的。 函数式编程已经流行起来,使得闭包成为 Node 开发者工具包的重要组成部分。这是 JavaScript 中闭包的一个简单示例:

JavaScript concepts every Node developer must master

  • 变量 count 被分配了一个外部函数。外部函数仅运行一次,它将计数器设置为零并返回内部函数。 _counter 变量只能由内部函数访问,这使得它的行为类似于私有变量。
  • 这里的例子是一个高阶函数(或元函数,一个接受或返回另一个函数的函数)。闭包存在于许多其他应用程序中。每当您在另一个函数中定义一个函数并且内部函数获得其自己的作用域并访问父作用域时,闭包就会发生——也就是说,内部函数可以“看到”外部变量,但反之则不然。
  • 这对于 map(innerFunction) 等函数方法也很有用,其中 innerFunction 可以使用外部作用域中定义的变量。

2. JavaScript 原型

每个 JavaScript 函数都有一个原型属性,用于附加属性和方法。该属性不可枚举。它允许开发人员将方法或成员函数附加到其对象。 JavaScript 仅通过prototype 属性支持继承。对于继承的对象,prototype 属性指向该对象的父对象。将方法附加到函数的常见方法是使用原型,如下所示:

JavaScript concepts every Node developer must master

尽管现代 JavaScript 具有相当复杂的类支持,但它仍然使用底层的原型系统。这是该语言大部分灵活性的来源。

3.使用哈希名称定义私有属性

过去,使用下划线作为变量前缀的约定用于指示变量应该是私有的。然而,这只是一个建议,并不是平台强制的限制。现代 JavaScript 为类提供了 hashtag 私有成员和方法

JavaScript concepts every Node developer must master

私有哈希名称是 JavaScript 中一个较新且非常受欢迎的功能!最新的 Node 版本和浏览器都支持它,并且 Chrome 开发工具允许您直接访问私有变量以方便。

4。使用闭包定义私有属性

有时您会看到另一种解决 JavaScript 原型系统中缺乏私有属性的方法是使用闭包。现代 JavaScript 允许您使用主题标签前缀定义私有属性,如上面的示例所示。然而,这对于 JavaScript 原型系统不起作用。另外,这是您在代码中经常发现的一个技巧,了解它在做什么很重要。

使用闭包定义私有属性可以让您模拟私有变量。需要访问私有属性的成员函数应该在对象本身上定义。以下是使用闭包创建私有属性的语法:

JavaScript concepts every Node developer must master

5。 JavaScript 模块

曾几何时,JavaScript 没有模块系统,开发人员设计了一个聪明的技巧(称为模块模式)来装配一些可以工作的东西。随着 JavaScript 的发展,它产生了两个而不是一个模块系统:CommonJS include 语法和 ES6 require 语法。

Node 传统上使用 CommonJS,而浏览器则使用 E​​S6。然而,Node 的最新版本(最近几年)也支持 ES6。现在的趋势是使用 ES6 模块,有一天我们将只使用一种模块语法来跨 JavaScript 使用。 ES6 看起来像这样(我们导出默认模块然后导入它):

JavaScript concepts every Node developer must master

您仍然会看到 CommonJS,并且有时需要使用它来导入模块。以下是使用 CommonJS 导出然后导入默认模块的方式:

JavaScript concepts every Node developer must master

6。错误处理

无论您使用什么语言或环境,错误处理都是必不可少且不可避免的。节点也不例外。处理错误有三种基本方法:try/catch 块、抛出新错误和 on() 处理程序。

带有 try/catch 的块是在出现问题时捕获错误的可靠方法:

JavaScript concepts every Node developer must master

在这种情况下,我们使用console.error将错误记录到控制台。您可以选择抛出错误,将其传递给下一个处理程序。请注意,这会破坏代码流的执行;也就是说,当前执行停止,堆栈上的下一个错误处理程序接管:

JavaScript concepts every Node developer must master

现代 JavaScript 在其 Error 对象上提供了很多有用的属性,包括 Error.stack 用于查看堆栈跟踪。在上面的示例中,我们使用构造函数参数设置 Error.message 属性和 Error.cause

您会发现错误的另一个地方是异步代码块,您可以在其中使用 .then() 处理正常结果。在这种情况下,您可以使用 on(‘error’) 处理程序或 onerror 事件,具体取决于 Promise 如何返回错误。有时,API 会返回一个错误对象作为第二个返回值和正常值。 (如果您在异步调用上使用await,则可以将其包装在try/catch中以处理任何错误。)这是处理异步错误的简单示例:

JavaScript concepts every Node developer must master

无论如何,永远不要吞下错误! 我不会在这里展示,因为有人可能会复制并粘贴它。基本上,如果您发现错误然后不执行任何操作,您的程序将默默地继续运行,而没有任何明显的迹象表明出现了问题。逻辑将被打破,你将不得不思考,直到你发现你的 catch 块中什么都没有。 (请注意,提供 finally{} 块而不使用 catch 块将导致您的错误被吞没。)

7. JavaScript 柯里化

柯里化是一种使函数更加灵活的方法。使用柯里化函数,您可以传递函数期望的所有参数并获取结果,也可以仅传递参数的子集并接收返回的函数,该函数等待其余参数。这是一个简单的咖喱示例:

JavaScript concepts every Node developer must master

原始柯里化函数可以通过在一组单独的括号中依次传递每个参数来直接调用:

JavaScript concepts every Node developer must master

这是一项有趣的技术,它允许您创建函数工厂,其中外部函数允许您部分配置内部函数。例如,您还可以使用上面的柯里化函数,如下所示:

JavaScript concepts every Node developer must master

在实际使用中,当您需要创建许多根据某些参数而变化的函数时,这个想法会很有帮助。

8。 JavaScript 应用、调用和绑定方法

虽然我们不是每天都会使用它们,但了解一下 callapplybind 方法是有好处的。在这里,我们正在处理一些严重的语言灵活性问题。从本质上讲,这些方法允许您指定 this 关键字解析的内容。

在所有三个函数中,第一个参数始终是您想要赋予函数的 this 值或上下文。

三者中,call是最简单的。这与在指定其上下文时调用函数相同。这是一个例子:

JavaScript concepts every Node developer must master

请注意,applycall 几乎相同。唯一的区别是您将参数作为数组传递,而不是单独传递。数组在 JavaScript 中更容易操作,为使用函数提供了更多可能性。这是使用 applycall 的示例:

JavaScript concepts every Node developer must master

bind 方法允许您将参数传递给函数而不调用它。返回一个新函数,其参数限制在任何其他参数之前。这是一个例子:

JavaScript concepts every Node developer must master

9。 JavaScript 记忆

记忆化是一种优化技术,它通过存储昂贵操作的结果并在同一组输入再次出现时返回缓存的结果来加速函数执行。 JavaScript 对象的行为类似于关联数组,因此可以轻松地在 JavaScript 中实现记忆化。以下是将递归阶乘函数转换为记忆阶乘函数的方法:

JavaScript concepts every Node developer must master

10. JavaScript IIFE

立即调用函数表达式(IIFE)是创建后立即执行的函数。它与任何事件或异步执行没有任何联系。您可以定义 IIFE,如下所示:

JavaScript concepts every Node developer must master

第一对括号 function(){...} 将括号内的代码转换为表达式。第二对括号调用表达式生成的函数。 IIFE 也可以描述为自调用匿名函数。它最常见的用法是限制通过 var 创建的变量的范围或封装上下文以避免名称冲突。

还有一些情况,您需要使用 await 调用函数,但您不在异步函数块内。这种情况有时会发生在您想要直接执行并作为模块导入的文件中。您可以将这样的函数调用包装在 IIFE 块中,如下所示:

JavaScript concepts every Node developer must master

11。有用的参数特征

虽然 JavaScript 不支持方法重载(因为它可以处理函数上的任意参数计数),但它确实有几个强大的工具来处理参数。其一,您可以定义一个具有默认值的函数或方法:

JavaScript concepts every Node developer must master

您还可以一次接受并处理所有参数,这样您就可以处理传入的任意数量的参数。这使用 rest 运算符将所有参数收集到一个数组中:

JavaScript concepts every Node developer must master

如果您确实需要处理不同的参数配置,您可以随时检查它们:

JavaScript concepts every Node developer must master

另外,请记住 JavaScript 包含一个内置参数数组。每个函数或方法都会自动为您提供 arguments 变量,保存传递给调用的所有参数。

结论

当您熟悉 Node 时,您会发现有很多方法可以解决几乎所有问题。正确的方法并不总是显而易见的。有时,针对特定情况有多种有效方法。了解许多可用选项会有所帮助。

这里讨论的 10 个 JavaScript 概念是每个 Node 开发人员都将从中受益的基础知识。但它们只是冰山一角。 JavaScript 是一种强大而复杂的语言。使用它的次数越多,您就会越了解 JavaScript 到底有多么庞大,以及您可以用它做多少事情。

版本聲明 本文轉載於:https://dev.to/usman_awan/10-javascript-concepts-every-node-developer-must-master-2na?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Item 避免使用其他類型更合適的字串
    Item 避免使用其他類型更合適的字串
    1。避免使用字串替代其他資料類型: 字串旨在表示文本,但經常被誤用來表示數字、枚舉或聚合結構。 如果資料本質上是數字,請使用 int、float 或 BigInteger 等類型,而不是 String。 String age = "30"; // incorreto int age = 30;...
    程式設計 發佈於2024-11-02
  • 如何使用sync.WaitGroup防止Go並發死鎖?
    如何使用sync.WaitGroup防止Go並發死鎖?
    解決 Goroutines 死鎖在這種情況下,您在 Go 並發代碼中遇到了死鎖錯誤。讓我們深入研究這個問題並提供一個有效的解決方案。 該錯誤是由於生產者和消費者的行為不匹配而發生的。在生產者函數中實現的生產者在有限的時間內在通道 ch 上發送值。然而,存在於主函數中的消費者無限期地運行,無休止地嘗試...
    程式設計 發佈於2024-11-02
  • 如何處理文字檔案中的 Unicode 文字:無錯誤編寫的完整指南
    如何處理文字檔案中的 Unicode 文字:無錯誤編寫的完整指南
    文本文件中的Unicode 文本:無錯誤寫作綜合指南從Google 文件中提取的編碼資料可能具有挑戰性,尤其是當遇到需要轉換為HTML 使用的非ASCII 符號時。本指南提供了處理 Unicode 文字並防止編碼錯誤的解決方案。 最初,在資料檢索期間將所有內容轉換為 Unicode 並將其寫入檔案似...
    程式設計 發佈於2024-11-02
  • EchoAPI 與 Insomnia:結合實例進行綜合比較
    EchoAPI 與 Insomnia:結合實例進行綜合比較
    作为一名全栈开发人员,我知道拥有一流的工具来调试、测试和记录 API 是多么重要。 EchoAPI 和 Insomnia 是两个出色的选项,每个选项都有自己独特的特性和功能。让我带您了解这些工具,比较它们的功能和优点,给您一些实际示例,并帮助您决定何时使用 EchoAPI 或 Insomnia。 ...
    程式設計 發佈於2024-11-02
  • 出發時間和持續時間|程式設計教學
    出發時間和持續時間|程式設計教學
    介紹 本實驗旨在測試您對 Go 的時間和持續時間支援的理解。 時間 下面的程式碼包含如何在 Go 中使用時間和持續時間的範例。但是,程式碼的某些部分遺失了。您的任務是完成程式碼,使其按預期工作。 Go程式語言基礎知識。 熟悉 Go 的時間和持續時間支援。 $ ...
    程式設計 發佈於2024-11-02
  • 起重面試問答
    起重面試問答
    1. JavaScript 中什么是提升? 答案: 提升是执行上下文创建阶段为变量和函数分配内存的过程。在此过程中,为变量分配了内存,并为变量分配了值 undefined。对于函数,整个函数定义存储在内存中的特定地址,并且对其的引用放置在该特定执行上下文中的堆栈上。 ...
    程式設計 發佈於2024-11-02
  • 了解 JavaScript 中的文件物件模型 (DOM)
    了解 JavaScript 中的文件物件模型 (DOM)
    你好,神奇的 JavaScript 開發者? 瀏覽器提供了一個稱為文檔物件模型 (DOM) 的程式設計接口,它允許腳本(特別是 JavaScript)與網頁佈局進行互動。網頁的文檔物件模型 (DOM) 是一種分層樹狀結構,它將頁面的元件排列成對象,由瀏覽器在載入時建立。借助此範例,...
    程式設計 發佈於2024-11-02
  • 開始使用 SPRING BATCH 進行編程
    開始使用 SPRING BATCH 進行編程
    Introduction Dans vos projets personnels ou professionnels, Il vous arrive de faire des traitements sur de gros volumes de données. Le traite...
    程式設計 發佈於2024-11-02
  • 使用 CSS 讓您的 Github 個人資料脫穎而出
    使用 CSS 讓您的 Github 個人資料脫穎而出
    以前,自訂 Github 個人資料的唯一方法是更新圖片或更改名稱。這意味著每個 Github 設定檔看起來都一樣,自訂它或脫穎而出的選項很少。 從那時起,您可以選擇使用 Markdown 建立自訂部分。您可以包括您的履歷、您的興趣和嗜好,讓您的個人資料反映您的身分。這是任何人在訪問您的個人資料時看...
    程式設計 發佈於2024-11-02
  • TypeScript 實用程式類型:增強程式碼可重複使用性
    TypeScript 實用程式類型:增強程式碼可重複使用性
    TypeScript 提供內建實用程式類型,讓開發人員有效地轉換和重複使用類型,讓您的程式碼更加靈活和 DRY。在本文中,我們將探討關鍵實用程式類型,例如 Partial、Pick、Omit 和 Record,以協助您將 TypeScript 技能提升到新的水平。 Partial:使所有屬性可選 ...
    程式設計 發佈於2024-11-02
  • 電報 window.open(url, &#_blank&#);在ios上工作很奇怪
    電報 window.open(url, &#_blank&#);在ios上工作很奇怪
    我正在製作一個電報機器人,我想添加將一些資訊從小型應用程式轉發到聊天的選項。我決定使用 window.open(url, '_blank');在我在 iPhone 上嘗試之前它一直運作良好。我沒有轉發,而是分享(這是一件大事,我正好需要轉發一條訊息)。我有一些如何處理它的想法,但它們...
    程式設計 發佈於2024-11-02
  • 誰是前端開發人員?
    誰是前端開發人員?
    當今網路上每個網站或平台的使用者介面部分都是前端開發人員工作的結果。他們參與創建用戶友好的介面,確保網站的外觀和功能。但到底誰是前端開發人員呢?我簡單解釋一下。 用戶看到的部分是前端 開啟網站時首先看到的是網頁介面:顏色、按鈕、文字、動畫。這都是由前端開發人員創建的。前端是網站或應...
    程式設計 發佈於2024-11-02
  • 如何使用保留的 CSS 樣式將 HTML 內容儲存為 PDF?
    如何使用保留的 CSS 樣式將 HTML 內容儲存為 PDF?
    使用CSS 將HTML 內容儲存為PDF在Web 開發中,即使將內容匯出為不同格式,保持視覺美觀也至關重要。當嘗試將 HTML 元素儲存為 PDF 時,這可能會帶來挑戰,因為 CSS 樣式可能會在轉換過程中遺失。 對於必須在已儲存的PDF 中保留CSS 的情況,請考慮使用以下方法:建立新視窗: 開啟...
    程式設計 發佈於2024-11-02
  • 為什麼使用 Print_r() 時要為 DateTime 物件新增幻像屬性?
    為什麼使用 Print_r() 時要為 DateTime 物件新增幻像屬性?
    Print_r() 變更 DateTime 物件Print_r() 在 DateTime 物件上新增屬性,以便在偵錯期間啟用自省。此行為是 PHP 5.3 中引入的內部功能的副作用,它將幻像公共屬性指派給轉儲到文字的實例。 要避免這些屬性所造成的錯誤,請改用反射。然而,不建議尋找這些屬性,因為它們沒...
    程式設計 發佈於2024-11-02
  • C 語言的資料結構與演算法:適合初學者的方法
    C 語言的資料結構與演算法:適合初學者的方法
    在 C 語言中,資料結構和演算法用於組織、儲存和操作資料。資料結構:陣列:有序集合,使用索引存取元素鍊錶:透過指標連結元素,支援動態長度堆疊:先進後出(FILO) 原則佇列:先進先出(FIFO) 原則樹:分級組織資料演算法:排序:依特定順序排序元素搜尋:在集合中尋找元素圖形:處理節點與邊之間的關係實...
    程式設計 發佈於2024-11-02

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

Copyright© 2022 湘ICP备2022001581号-3