一文带你玩转JavaScript的箭头函数

一文带你玩转JavaScript的箭头函数

什么是箭头函数?

箭头函数是ES6引入的一种新的函数声明语法,它可以让我们更简洁地书写函数,并且可以解决一些this指向上的问题。

箭头函数与普通函数的区别在于箭头函数没有自己的this,它的this是词法作用域中的this,即在定义箭头函数时所处的上下文中的this。

箭头函数的基本语法

箭头函数有两种语法:

  1. 不带参数的箭头函数

javascript
()=> {
// 函数体
}

  1. 带参数的箭头函数

javascript
(参数1, 参数2, ...) => {
// 函数体
}

多个参数之间用逗号分隔,参数和箭头之间不能有空格。

对于只有一个参数的箭头函数,可以省略参数周围的括号:

参数 => {
    // 函数体
}

箭头函数与普通函数的区别

箭头函数与普通函数的区别在于this的指向。普通函数中的this是动态的,它的指向取决于函数的调用方式,而箭头函数中的this是静态的,它的指向在定义函数时就已经确定了。

例如:

const obj = {
    name: '张三',
    sayName() {
        console.log(this); // 输出:{ name: '张三', sayName: [Function: sayName] }
        function inner() {
            console.log(this); // 输出:全局对象
        }
        inner();
    },
    sayNameWithArrow() {
        console.log(this); // 输出:{ name: '张三', sayNameWithArrow: [Function: sayNameWithArrow] }
        const inner = () => {
            console.log(this); // 输出:{ name: '张三', sayNameWithArrow: [Function: sayNameWithArrow] }
        }
        inner();
    }
};
obj.sayName();
obj.sayNameWithArrow();

从输出结果可以看出,普通函数中的this指向的是调用该函数的对象(即obj),而内部的普通函数inner中的this指向的是全局对象。而箭头函数中的this永远指向定义函数时所处的上下文,即上面的例子中的obj对象。

箭头函数的使用场景

  1. 简化回调函数的书写

箭头函数可以让我们更方便地书写回调函数,例如:

```javascript
const arr = [1, 2, 3, 4];

let newArr = arr.map(function(item) {
return item * 2;
});

// 使用箭头函数可以简化为:
let newArr = arr.map(item => item * 2);
```

  1. 解决this指向的问题

箭头函数可以解决在普通函数中this指向的问题,例如:

```javascript
const obj = {
name: '张三',
sayName() {
setTimeout(function() {
console.log(this.name); // 输出:undefined
}, 1000);

       setTimeout(() => {
           console.log(this.name); // 输出:张三
       }, 1000);
   }

};
obj.sayName();
```

在上面的例子中,由于setTimeout函数是在全局上下文中调用的,因此内部的普通函数this指向的是全局对象,而箭头函数中的this指向的是定义函数时的上下文,即obj对象。

示例说明

下面给出两个使用箭头函数的示例:

示例1:计算商品价格

const products = [
    {
        name: '手机',
        price: 1999,
        count: 2
    },
    {
        name: '电脑',
        price: 8999,
        count: 1
    },
    {
        name: '耳机',
        price: 399,
        count: 3
    }
];

const totalPrice1 = products.reduce(function(total, product) {
    return total + product.price * product.count;
}, 0);

const totalPrice2 = products.reduce((total, product) => total + product.price * product.count, 0);

console.log(totalPrice1); // 输出:23396
console.log(totalPrice2); // 输出:23396

在上面的示例中,我们使用reduce方法计算商品的总价,第一个参数是回调函数,第二个参数是初始值。在普通函数的回调函数中,我们使用了this指向,而在箭头函数中,直接使用了total和product,使代码更加简洁。

示例2:获取数组元素的长度

const arr = ['hello', 'world', ''];

const len1 = arr.map(function(item) {
    return item.length;
});

const len2 = arr.map(item => item.length);

console.log(len1); // 输出:[5, 5, 0]
console.log(len2); // 输出:[5, 5, 0]

在上面的示例中,我们使用map方法计算数组元素的长度,第一个参数是回调函数。在普通函数中,我们需要使用return来返回长度,而在箭头函数中,可以直接省略return关键字,使代码更加简洁。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你玩转JavaScript的箭头函数 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js实现文件流式下载文件方法详解及完整代码

    那我来详细讲解一下“js实现文件流式下载文件方法详解及完整代码”的完整攻略吧。 1. 前言 文件下载是许多 Web 应用程序的常见需求之一,而在前端技术中实现文件下载的方式有很多种,其中一种可以称为文件流式下载。本文将详细介绍如何使用 JavaScript 实现文件流式下载,并提供代码示例。 2. 实现思路 实现文件流式下载的基本思路是将文件分成多个片段进行…

    JavaScript 2023年5月27日
    00
  • javascript的数据类型、字面量、变量介绍

    当谈到 JavaScript 时,数据是非常重要的。JavaScript 可以处理多种类型的数据。对于每种数据类型,JavaScript 都有相应的字面量和对应的变量类型。下面将详细介绍 JavaScript 数据类型、字面量和变量。 数据类型 JavaScript 有七种数据类型,其中六种是原始类型,一种为对象类型。原始类型包括数字、字符串、布尔值、nul…

    JavaScript 2023年5月28日
    00
  • 将字符串中由空格隔开的每个单词首字母大写

    要将字符串中由空格隔开的每个单词首字母大写,可以使用字符串操作方法和正则表达式。 步骤如下: 首先要将字符串进行拆分,将每个单词分离。可以使用split()方法,该方法可以按照指定字符或正则表达式对字符串进行分割,返回一个由分割出来的子字符串组成的数组。 例如: let str = "hello world"; let arr = str…

    JavaScript 2023年6月11日
    00
  • 一个简单的js动画效果代码

    下面我来详细讲解如何编写一个简单的js动画效果代码。 准备工作 在编写动画代码前,需要准备好HTML文件和CSS文件。 HTML文件 假设需要给一个按钮添加动画效果,我们可以在HTML文件中添加一个按钮元素,如: <button id="btn">按钮</button> CSS文件 我们要将按钮的样式设为相对定位(…

    JavaScript 2023年6月10日
    00
  • JavaScript中常见的字符串操作函数及用法汇总

    JavaScript中常见的字符串操作函数及用法汇总 JavaScript中有很多字符串操作函数,这篇攻略将会讲解其中常见的一些函数及其用法。我们来详细了解一下吧。 字符串的创建 字符串可以通过两种方式创建,分别是双引号和单引号。 var str1 = "JavaScript"; // 使用双引号创建字符串 var str2 = ‘Jav…

    JavaScript 2023年5月19日
    00
  • JavaScript高级程序设计 读书笔记之八 Function类及闭包

    JavaScript高级程序设计 读书笔记之八 Function类及闭包 Function类 Function类的特点 Function类本身也是一个函数,它可以像工厂函数一样构建新的函数实例。 使用Function构造函数构建函数,可以动态地创建函数语句。 可以将字符串形式的代码,通过Function的形式执行。 Function构造函数的使用 Funct…

    JavaScript 2023年5月28日
    00
  • JavaScript中循环遍历Array与Map的方法小结

    下面是详细讲解“JavaScript中循环遍历Array与Map的方法小结”的完整攻略。 一、循环遍历Array 1. for循环 使用for循环逐一遍历数组元素,并进行操作。示例如下: const arr = [‘a’, ‘b’, ‘c’, ‘d’]; for (let i = 0; i < arr.length; i++) { console.lo…

    JavaScript 2023年5月27日
    00
  • 兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现

    要实现检测页面装载完毕的功能,可以使用Ext.onReady函数。该函数是ExtJS框架提供的,用于在页面元素完全加载之后执行给定的函数。 具体步骤如下: 引入ExtJS的库文件。在HTML页面的标签中加入以下代码: <script type="text/javascript" src="path/to/extjs/ext…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部