」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > ESnd 箭頭函數綜合指南

ESnd 箭頭函數綜合指南

發佈於2024-11-06
瀏覽:528

A Comprehensive Guide to ESnd Arrow Functions

ES6简介

ECMAScript 2015,也称为 ES6 (ECMAScript 6),是对 JavaScript 的重大更新,引入了新的语法和功能,使编码更高效、更易于管理。 JavaScript 是用于 Web 开发的最流行的编程语言之一,ES6 的改进大大增强了其功能。

本指南将涵盖 ES6 中引入的重要功能,特别关注 箭头函数,一种强大的新函数编写方式。

ES6 的主要特性

1. let 和 const

ES6引入了两种新的变量声明方式:let和const。

  • let:声明块作用域变量,这意味着该变量仅在声明它的块内可用。

     let x = 10;
     if (true) {
       let x = 2;
       console.log(x); // 2 (inside block)
     }
     console.log(x); // 10 (outside block)
    
  • const:声明一个不能重新赋值的常量变量。然而,这并不会使变量不可变——使用 const 声明的对象仍然可以更改其属性。

     const y = 10;
     y = 5; // Error: Assignment to constant variable.
    
     const person = { name: "John", age: 30 };
     person.age = 31; // This is allowed.
    

2. 箭头函数

ES6 最受关注的功能之一是箭头函数。它为编写函数提供了更短、更简洁的语法。

#### 语法比较:

传统函数(ES5):

   var add = function(x, y) {
     return x   y;
   };

箭头函数 (ES6):

   const add = (x, y) => x   y;

箭头函数的不同之处如下:

  • 更短的语法:不需要写function关键字,如果函数只有一条语句,可以省略大括号{}。
  • 隐式返回:如果函数只包含一个表达式,则自动返回该表达式的结果。
  • 没有 this 绑定:箭头函数没有自己的 this,使得它们不适合对象方法。

单线箭头函数示例:

   const multiply = (a, b) => a * b;
   console.log(multiply(4, 5)); // 20

箭头函数也可以不带参数使用:

   const greet = () => "Hello, World!";
   console.log(greet()); // "Hello, World!"

对于多行函数,需要大括号{},并且返回语句必须显式:

   const sum = (a, b) => {
     let result = a   b;
     return result;
   };

箭头函数和 this
一个重要的区别是箭头函数中的行为方式。与传统函数不同,箭头函数不绑定自己的 this — 它们从周围的上下文继承 this。

   const person = {
     name: "John",
     sayName: function() {
       setTimeout(() => {
         console.log(this.name);
       }, 1000);
     }
   };
   person.sayName(); // "John"

在上面的示例中,setTimeout 中的箭头函数从 sayName 方法继承了 this,它正确引用了 person 对象。

3. 解构赋值

解构允许我们从数组或对象中提取值,并以更简洁的方式将它们分配给变量。

对象解构:

   const person = { name: "John", age: 30 };
   const { name, age } = person;
   console.log(name); // "John"
   console.log(age);  // 30

数组解构:

   const fruits = ["Apple", "Banana", "Orange"];
   const [first, second] = fruits;
   console.log(first);  // "Apple"
   console.log(second); // "Banana"

4. 展开和休息运算符 (...)

... 运算符可用于将数组展开为单个元素或将多个元素收集到一个数组中。

  • Spread:将数组扩展为单个元素。

     const numbers = [1, 2, 3];
     const newNumbers = [...numbers, 4, 5];
     console.log(newNumbers); // [1, 2, 3, 4, 5]
    
  • Rest:将多个参数收集到一个数组中。

     function sum(...args) {
       return args.reduce((acc, curr) => acc   curr);
     }
     console.log(sum(1, 2, 3, 4)); // 10
    

5. 承诺

Promises 用于处理 JavaScript 中的异步操作。 Promise 代表了一个可能现在、将来或永远不可用的值。

例子:

   const myPromise = new Promise((resolve, reject) => {
     setTimeout(() => {
       resolve("Success!");
     }, 1000);
   });

   myPromise.then(result => {
     console.log(result); // "Success!" after 1 second
   });

在此示例中,promise 在 1 秒后解析,then() 方法处理解析后的值。

6. 默认参数

在ES6中,可以为函数参数设置默认值。当未提供或未定义参数时,这很有用。

例子:

   function greet(name = "Guest") {
     return `Hello, ${name}!`;
   }
   console.log(greet());       // "Hello, Guest!"
   console.log(greet("John")); // "Hello, John!"

7. 字符串方法(包括()、startsWith()、endsWith())

新方法已添加到字符串中以使常见任务变得更容易:

  • includes():检查字符串是否包含指定值。

     let str = "Hello world!";
     console.log(str.includes("world")); // true
    
  • startsWith():检查字符串是否以指定值开头。

     console.log(str.startsWith("Hello")); // true
    
  • endsWith():检查字符串是否以指定值结尾。

     console.log(str.endsWith("!")); // true
    

8. 数组方法 (find(), findIndex(), from())

ES6 引入了处理数组的新方法:

  • find():返回第一个满足条件的元素。

     const numbers = [5, 12, 8, 130, 44];
     const found = numbers.find(num => num > 10);
     console.log(found); // 12
    
  • findIndex():返回第一个满足条件的元素的索引。

     const index = numbers.findIndex(num => num > 10);
     console.log(index); // 1 (position of 12 in the array)
    

9. 课程

ES6 向 JavaScript 引入了类,它们是 JavaScript 现有的基于原型的继承的语法糖。类允许更清晰、更易于理解的面向对象编程。

例子:

   class Car {
     constructor(brand, year) {
       this.brand = brand;
       this.year = year;
     }

     displayInfo() {
       return `${this.brand} from ${this.year}`;
     }
   }

   const myCar = new Car("Toyota", 2020);
   console.log(myCar.displayInfo()); // "Toyota from 2020"

结论

ES6 改变了 JavaScript,使其更高效、更易于使用。 箭头函数的引入简化了函数语法,而解构promisesclasses扩展运算符等新功能 允许开发人员编写更清晰、更具表现力的代码。无论您是初学者还是高级开发人员,了解这些 ES6 功能对于编写现代 JavaScript 至关重要。

通过掌握这些概念,您将能够更好地应对现实世界的编码挑战并构建高效、可扩展的 Web 应用程序。

跟进 GitHub 上的 Arrow Functions 项目

参考

  • https://www.w3schools.com/js/js_es6.asp
  • https://towardsdatascience.com/javascript-es6-iterables-and-iterators-de18b54f4d4
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements
版本聲明 本文轉載於:https://dev.to/tobidelly/a-comprehensive-guide-to-es6-and-arrow-functions-k13?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2025-01-12
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2025-01-12
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此在JS中它們也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index pa...
    程式設計 發佈於2025-01-12
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2025-01-12
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2025-01-12
  • 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-01-12
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內容...
    程式設計 發佈於2025-01-11
  • 每日 JavaScript 挑戰 #JS - 找出最長的公共前綴
    每日 JavaScript 挑戰 #JS - 找出最長的公共前綴
    每日 JavaScript 挑戰:找出最長的公共前綴 嘿,開發者們! ?歡迎來到今天的 JavaScript 程式設計挑戰。讓我們保持敏銳的程式設計技能! 挑戰 難度:中 主題:字串操作 描述 給定一個字串數組,編寫一個函數來尋找其中最長的公共前綴...
    程式設計 發佈於2025-01-11
  • 如何修復 macOS 上 Django 中的「配置不正確:載入 MySQLdb 模組時出錯」?
    如何修復 macOS 上 Django 中的「配置不正確:載入 MySQLdb 模組時出錯」?
    MySQL配置不正確:相對路徑的問題在Django中運行python manage.py runserver時,可能會遇到以下錯誤:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    程式設計 發佈於2025-01-11
  • 如何計算Oracle 11g中兩個日期之間的確切天數?
    如何計算Oracle 11g中兩個日期之間的確切天數?
    檢索Oracle 11g中日期之間的天數問題:如何我在Oracle 11g 中取得兩個日期之間的確切天數?使用表達式 sysdate - to_date('2009-10-01', 'yyyy-mm-dd') 會產生一個區間而不是整數。 答案:要在Oracle 11g...
    程式設計 發佈於2025-01-11
  • 使用單 Spa 建造微前端:指南
    使用單 Spa 建造微前端:指南
    TL;DR: 使用 single-spa 构建微前端可以更轻松地将大型应用程序拆分为小的独立部分,以便不同的团队可以在不影响其他团队的情况下处理各个部分。本博客展示了如何创建 Angular 和 React 微前端、将它们连接到根配置并进行部署。 微前端已成为扩展前端应用程序的流行架构风格,特别是当...
    程式設計 發佈於2025-01-11
  • 如何使用 MongoDB Go 驅動程式建立嵌套 OR/AND 查詢?
    如何使用 MongoDB Go 驅動程式建立嵌套 OR/AND 查詢?
    使用MongoDB Go Driver 進行嵌套邏輯查詢MongoDB 查詢通常需要使用嵌套邏輯運算子(AND/OR) 來過濾基於文檔的文檔根據多個標準。在 Go MongoDB 驅動程式中,可以使用 bson.D 和 bson.M 類型建構巢狀邏輯查詢。 建構嵌套OR/AND 查詢建立一個巢狀OR...
    程式設計 發佈於2025-01-11
  • 隨機森林分類:揭示改變決策的強大機器學習技術
    隨機森林分類:揭示改變決策的強大機器學習技術
    簡介:明智決策的森林 想像一個專家顧問團隊,每個人都帶來獨特的見解來解決複雜的問題。這正是隨機森林分類在機器學習領域的工作原理——一種強大的智慧技術,結合多個決策樹來做出極其準確的預測。 什麼是隨機森林分類? 隨機森林是一種整合學習方法,其運作方式類似於機器學習的...
    程式設計 發佈於2025-01-10
  • TEMPLINK 單一、安全的連結可在幾秒鐘內存​​取多個文件
    TEMPLINK 單一、安全的連結可在幾秒鐘內存​​取多個文件
    TEMPLINK 實際上是做什麼的? Templink 允許您創建一個安全的鏈接,只需幾秒鐘即可訪問多個文件。透過設定過期日期和密碼保護的選項,您可以完全控制您的檔案共用體驗。 在這裡試試看 - https://templink-nu.vercel.app/ Github 儲存庫...
    程式設計 發佈於2025-01-10
  • 如何使用相關表中的值更新一個表中的欄位?
    如何使用相關表中的值更新一個表中的欄位?
    使用相關表格中的值更新欄位 本文探討如何根據特定條件(QuestionID 為 NULL)更新一個表格 (QuestionTrackings) 中的資料列,該資料列的值來自相關表 (QuestionAnswers)。我們可以使用 UPDATE 語句結合 INNER JOIN 來實現此目的。 SQ...
    程式設計 發佈於2025-01-10

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

Copyright© 2022 湘ICP备2022001581号-3