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

yizhihongxing

一文带你玩转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日

相关文章

  • ajaxrequest.js ajaxrequest 0.7最新版 使用AJAXRequest进行AJAX应用程序开发入门小技巧

    使用AJAXRequest进行AJAX应用程序开发 AJAXRequest是一个轻量级的JavaScript库,旨在为基于AJAX的应用程序提供优雅而简单的开发方式。AJAXRequest 0.7是最新版本,适用于简单的AJAX请求和响应处理。 安装 你可以从GitHub下载AJAXRequest 0.7的源代码,也可以从CDN上使用以下代码: <sc…

    JavaScript 2023年6月11日
    00
  • 写几行代码,了解响应式原理

    作者:袁首京 原创文章,转载时请保留此声明,并给出原文连接。 作为当下的开发人员,无论是不是前端,可能都会频繁的与 React、Vue、Svelte、Solidjs 等等打交道。也许你已经很清楚它们背后的运作原理,那不必往下看了。如果还不是很清楚,那咱们可以一起写几行代码,来瞅一眼这些响应式框架背后的思路。 响应式框架最根本的功能其实只有一条:当数据发生变化…

    JavaScript 2023年5月3日
    00
  • FCKeditor 和 SyntaxHighlighter 代码高亮插件的整合

    下面是关于“FCKeditor 和 SyntaxHighlighter 代码高亮插件的整合”的详细攻略。 概述 首先我们要理解这两个插件是什么。FCKeditor是一个基于Web的WYSIWYG文本编辑器,可以方便地进行文本排版,支持多种格式,具有图形用户界面。而SyntaxHighlighter是一个代码高亮插件,可以让我们方便地将代码高亮显示,并可以自定…

    JavaScript 2023年6月11日
    00
  • JavaScript的DOM事件详解

    下面是JavaScript的DOM事件详解的完整攻略。 什么是DOM事件? DOM事件是指由DOM元素触发的事件,包括如下几种类型: 鼠标事件:click、mousedown、mousemove、mouseup、mouseover、mouseout、mouseenter、mouseleave等。 键盘事件:keydown、keypress、keyup等。 表…

    JavaScript 2023年6月10日
    00
  • 深入分析JQuery和JavaScript的异同

    深入分析 jQuery 和 JavaScript 的异同 JavaScript 是一门编程语言,而 jQuery 则是建立在 JavaScript 语言上的一个开源库。在许多方面,jQuery 帮助简化了JavaScript 编程,但也有一些重要的异同点需要我们深入了解。本文将会介绍这些异同点。 引入方式 在你能够使用 jQuery 或 JavaScript…

    JavaScript 2023年5月18日
    00
  • ES6新语法之解构实践指南

    ES6新语法之解构实践指南 什么是解构 解构是一种从数组或对象中提取数据的方式,它允许我们将属性或元素提取到不同的变量中。ES6中,我们可以通过解构来轻松地获取对象或数组中的属性或元素。 解构对象 解构一个对象意味着将对象的属性值复制到一个变量中。这是通过使用花括号和变量名称来完成的。 const person = { firstName: ‘John’, …

    JavaScript 2023年6月11日
    00
  • js数组相减简单示例【删除a数组所有与b数组相同元素】

    下面是针对js数组相减简单示例【删除a数组所有与b数组相同元素】的完整攻略: 步骤一:创建两个数组 首先我们需要创建两个数组,分别是a数组和b数组。可以通过以下代码创建: const a = [1, 2, 3, 4, 5]; const b = [3, 4, 5, 6, 7]; 步骤二:使用filter方法过滤出不同元素 接下来我们需要使用数组的filter…

    JavaScript 2023年5月28日
    00
  • javascript 调用其他页面的js函数或变量的脚本

    要在JavaScript中调用其他页面的函数或变量,有以下两种方法: 1. 使用window.opener对象 当在一个页面中用window.open打开另一个页面时,这个被打开的页面就可以使用window.opener来访问打开它的页面。所以,我们可以利用这个特性来调用父页面的函数或变量。 父页面示例代码: <!DOCTYPE html> &l…

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