”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > ESnd 箭头函数综合指南

ESnd 箭头函数综合指南

发布于2024-11-06
浏览:319

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]删除
最新教程 更多>
  • 如何优化 Matplotlib 绘图性能以提高速度和效率?
    如何优化 Matplotlib 绘图性能以提高速度和效率?
    提高 Matplotlib 绘图性能使用 Matplotlib 绘图有时会很慢,尤其是在处理复杂或动画图形时。了解这种缓慢背后的原因可以帮助您优化代码以获得更快的性能。瓶颈和 BlittingMatplotlib 绘图过程的主要瓶颈在于它对所有内容的重绘每次调用Fig.canvas.draw()。然...
    编程 发布于2024-11-06
  • 面试工具包:数组 - 滑动窗口。
    面试工具包:数组 - 滑动窗口。
    一切都与模式有关! 一旦你学会了这些模式,一切都开始变得更容易了!如果你像我一样,你可能不喜欢技术面试,我不怪你——面试可能很艰难。 数组问题是面试中最常见的问题。这些问题通常涉及使用自然数组: const arr = [1, 2, 3, 4, 5]; 还有字符串问题,本质上是字符...
    编程 发布于2024-11-06
  • 字符串常量池:为什么即使文字存在,“new”也会创建一个新的字符串对象?
    字符串常量池:为什么即使文字存在,“new”也会创建一个新的字符串对象?
    字符串常量池:深入检查Java 中的字符串常量池被池化以优化内存使用并提高性能。这意味着当遇到字符串文字时,编译器会检查字符串常量池中是否存在具有相同值的现有字符串对象。如果找到,引用将定向到现有对象,避免创建新对象。但是,当使用“new”运算符创建新的 String 对象时,会出现混乱,因为这似乎...
    编程 发布于2024-11-06
  • 如何在 PHP 中使用 array_push() 处理多维数组?
    如何在 PHP 中使用 array_push() 处理多维数组?
    使用 PHP 的 array_push 添加元素到多维数组使用多维数组可能会令人困惑,特别是在尝试添加新元素时。当任务是将存储在 $newdata 中的循环中的数据附加到给定 $md_array 内的子数组“recipe_type”和“cuisine”时,就会出现此问题。要实现此目的,您可以利用ar...
    编程 发布于2024-11-06
  • Python 第 00 天
    Python 第 00 天
    今天,我开始了我的个人挑战,#100DaysOfCode。为了这个挑战,我选择学习Python,因为我的目标是成为一名数据分析师。 第 2 章: 变量和字符串 我用来学习 Python 的材料是 Eric Matthes 写的一本名为《Python Crash Course》的书。它对学习非常有帮...
    编程 发布于2024-11-06
  • PDO、准备好的语句或 MySQLi:哪一个最适合您的 PHP 项目?
    PDO、准备好的语句或 MySQLi:哪一个最适合您的 PHP 项目?
    揭秘 PDO、Prepared statements 和 MySQLi在 PHP 数据库交互领域,初学者经常会遇到从遗留 mysql_ 过渡的建议* 函数适用于更现代的选项,如 PDO、准备好的语句或 MySQLi。虽然访问和操作数据库的基本目标仍然存在,但每种技术都提供了独特的优势和细微差别。PD...
    编程 发布于2024-11-06
  • WordPress 主题开发:终极文件夹结构指南
    WordPress 主题开发:终极文件夹结构指南
    WordPress 是构建网站时的灵活框架。您可以构建任何类型的网站,例如 CMS、电子商务、单一登陆页面等。这里我将讨论 WordPress 项目的结构,以便您可以制作自定义主题。当您为自己或客户制作网站时,流行的主题(例如 divi、Astra、Neve、oceanwp 等)是一些不错的选择。但...
    编程 发布于2024-11-06
  • 工具和资源 [实时文档]
    工具和资源 [实时文档]
    CSS https://unsplash.com = 示例图像 https://uifaces.co = 示例用户面部图像 https://extract.pics/ = 从网站提取所有图像 https://color.adobe.com/ = 上传渐变图像并获取十六进制颜色代码 ...
    编程 发布于2024-11-06
  • 如何在 JavaScript 中检查字符串是否包含数组中的任何子字符串?
    如何在 JavaScript 中检查字符串是否包含数组中的任何子字符串?
    使用 JavaScript 数组查找字符串中的子字符串为了确定字符串是否包含数组中的任何子字符串,JavaScript 提供了灵活的方法.Array Some Methodsome 方法迭代数组,提供回调函数来测试每个元素。要检查子字符串,请使用 indexOf() 方法搜索字符串中的每个数组元素:...
    编程 发布于2024-11-06
  • Laravel Livewire:它是什么以及如何在您的 Web 应用程序中使用它
    Laravel Livewire:它是什么以及如何在您的 Web 应用程序中使用它
    Livewire 是 Laravel 生态系统中最重要的项目之一,专门针对前端开发。 Livewire v3 最近发布了,让我们来探讨一下 Livewire 是什么,以及什么样的项目适合其架构。 Livewire 的独特之处在于它允许开发“现代”Web 应用程序,而无需使用专用的 JavaScrip...
    编程 发布于2024-11-06
  • C++中通过空指针调用方法可以不崩溃吗?
    C++中通过空指针调用方法可以不崩溃吗?
    C 中通过空指针调用方法的意外行为 在提供的代码片段中,通过空指针调用方法,但是令人惊讶的是,该方法调用似乎执行时没有崩溃。这种不寻常的行为提出了一个问题:这是 C 标准允许的还是仅仅是实现优化?解释在于 C 中方法调用的本质。当调用对象的方法时,编译器知道该对象的类型,因此知道要执行的方法的地址。...
    编程 发布于2024-11-06
  • 如何在Python中对列表进行减法?
    如何在Python中对列表进行减法?
    列表相减:计算差值Python 中的列表可以包含各种元素。为了对列表执行数学运算(例如减法),我们采用特定的方法或技术。让我们探讨如何从一个列表中减去另一个列表。使用列表理解进行逐元素减法一种方法是利用列表理解,它会迭代第一个列表并计算差异,同时保留原始顺序:[item for item in x ...
    编程 发布于2024-11-06
  • 如何在 Python 中检查生成器是否为空?
    如何在 Python 中检查生成器是否为空?
    检测空生成器初始化在Python中,生成器是一次产生一个值的迭代器。因此,从一开始就确定发电机是否为空可能是一个挑战。与列表或元组不同,生成器没有固有的长度或 isEmpty 方法。解决挑战为了解决这个问题,一种常见的方法是使用辅助函数查看生成器中的第一个值而不消耗它。如果 peek 函数返回 No...
    编程 发布于2024-11-06
  • ## 想从Python高效调用Java?探索 Py4J 作为 JPype 的替代品!
    ## 想从Python高效调用Java?探索 Py4J 作为 JPype 的替代品!
    从 Python 调用 Java:Py4J 作为 JPype 的替代品从 Python 调用 Java 代码有几个潜在的解决方案。其中一个选项 JPype 可能难以编译,并且由于缺乏最新版本而显得不活跃。然而,另一种解决方案是 Py4J,这是一个简单的库,提供了一个方便的接口,用于从 Python ...
    编程 发布于2024-11-06
  • 小Swoole数据库
    小Swoole数据库
    Small Swoole Db 2.3引入左连接: $selector = (new TableSelector('user')) ->leftJoin('post', 'messageOwner', 'message') ; $selector->where() -&g...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3