JS箭头函数和常规函数之间的区别实例分析【 5 个区别】

下面是详细的讲解。

什么是箭头函数

箭头函数是ECMAScript 6中新增的一种语法,用于定义函数。箭头函数相比常规函数,语法更加简洁,同时还有一些不同之处。箭头函数的语法如下:

(param1, param2, …, paramN) => { statements }

其中,param1, param2, …, paramN表示函数的参数列表,statements表示在函数中要执行的语句。

常规函数和箭头函数之间的区别

下面介绍常规函数和箭头函数之间5个不同之处。

1. 箭头函数不能使用arguments对象

在常规函数中,我们可以使用arguments对象来获取传入的参数。但是,在箭头函数中,不能使用arguments对象。这是因为箭头函数没有自己的this值,而arguments对象和this值都是在函数被调用时运行时创建的,因此在箭头函数中无法使用arguments对象。

function foo() {
    console.log(arguments);
}
foo(1, 2, 3);  // 输出: [1, 2, 3]

const bar = () => {
    console.log(arguments);
}
bar(1, 2, 3);  // 报错:arguments is not defined

2. 箭头函数的this值

常规函数中的this值是在函数运行时确定的,取决于函数的调用方式。而箭头函数中的this值是在函数定义时确定的,它指向函数所在上下文的this值。

const obj = {
    name: 'Tom',
    sayHi: function() {
        console.log("Hi, I'm", this.name);
    },
    sayHiArrow: () => {
        console.log("Hi, I'm", this.name);
    }
}

obj.sayHi();         // Hi, I'm Tom
obj.sayHiArrow();    // Hi, I'm undefined

3. 箭头函数无法绑定this

在常规函数中,我们可以使用bindcallapply等方法来显式绑定this值。但是,在箭头函数中,无法使用这些方法来修改this值,因为箭头函数的this值已经在函数定义时被确定了。

const obj = {
    name: 'Tom',
    sayHi: function() {
        console.log("Hi, I'm", this.name);
    },
    sayHiArrow: () => {
        console.log("Hi, I'm", this.name);
    }
}

const otherObj = {
    name: 'Jack'
}

const sayHi = obj.sayHi.bind(otherObj);
const sayHiArrow = obj.sayHiArrow.bind(otherObj);

sayHi();         // Hi, I'm Jack
sayHiArrow();    // Hi, I'm undefined

4. 箭头函数没有原型

在常规函数中,每个函数都有一个原型对象,该对象上有一些方法和属性。而在箭头函数中,没有原型对象。

function foo() {}
const bar = () => {}

console.log(foo.prototype);  // {}
console.log(bar.prototype);  // undefined

5. 箭头函数不支持yield关键字

yield关键字用于生成器函数中,用于控制生成器函数的执行流程。而箭头函数不支持yield关键字,因此不能用于生成器函数。

function* generator() {
    yield 1;
    yield 2;
}

const generatorArrow = () => {
    yield 1;   // 报错:SyntaxError: Unexpected keyword 'yield'
    yield 2;
}

示例说明

下面的两个示例都是通过比较常规函数和箭头函数的区别来进行解释的。

示例一

function getSalary(salary, tax) {
    return salary - salary * tax;
}

const getSalaryArrow = (salary, tax) => salary - salary * tax;

console.log(getSalary(10000, 0.2));          // 输出: 8000
console.log(getSalaryArrow(10000, 0.2));     // 输出: 8000

上面的示例中,常规函数getSalary和箭头函数getSalaryArrow的功能都是计算税后工资。通过比较可以发现,箭头函数的语法更加简洁。

示例二

function Counter() {
    this.count = 0;
    setInterval(function() {
        this.count++;
        console.log(this.count);
    }, 1000);
}

const counter = new Counter();

上面的示例中,Counter是一个构造函数,它会在每一秒钟增加计数器的值并输出。但是,由于在匿名函数中使用了this关键字,而在匿名函数执行时上下文已经改变,因此会出现计数器不变的情况。为了解决这个问题,我们可以使用箭头函数来绑定this值。

function Counter() {
    this.count = 0;
    setInterval(() => {
        this.count++;
        console.log(this.count);
    }, 1000);
}

const counter = new Counter();

上面的示例中,箭头函数setInterval(() => {...})中的this值指向了Counter函数的实例对象,因此可以正常执行计数器加1的操作。

至此,关于“JS箭头函数和常规函数之间的区别实例分析【 5 个区别】”的完整攻略就讲解完了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS箭头函数和常规函数之间的区别实例分析【 5 个区别】 - Python技术站

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

相关文章

  • JavaScript可迭代对象详细介绍

    JavaScript可迭代对象详细介绍 在JavaScript中,迭代遍历数组或对象是非常常见的操作。ES6引入了Iterator/Iterable,提供了有效的解决方案。在本文中,我们将学习JavaScript可迭代对象的详细介绍,包括Iterable/Iterator协议、遍历方法和示例。 Iterable/Iterator协议 Iterable/Ite…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript中Date.UTC()方法的使用

    详解JavaScript中Date.UTC()方法的使用 什么是Date.UTC()方法? 在JavaScript中,Date.UTC()是一个可以根据协调世界时(UTC)创建日期对象的方法。该方法的返回值是指定日期时间距离Unix纪元(格林威治标准时间1970年1月1日00:00:00)的毫秒数。 Date.UTC()方法的语法 Date.UTC(year…

    JavaScript 2023年5月27日
    00
  • JavaScript高级程序设计(第3版)学习笔记9 js函数(下)

    《JavaScript高级程序设计(第3版)学习笔记9 js函数(下)》一文主要讲解了 JavaScript 中函数的进阶应用,包括函数作为对象、闭包、函数自执行等内容,下面是具体的攻略: 1. 函数作为对象 在 JavaScript 中,函数同时也是对象,因此它们可以拥有属性和方法。函数的属性通常是直接在函数对象上定义,而方法则是定义在函数的原型对象上。 …

    JavaScript 2023年5月18日
    00
  • javascript定时器的简单应用示例【控制方块移动】

    下面是关于“javascript定时器的简单应用示例【控制方块移动】”的完整攻略。 一. 定时器的概念和用途 1.1 概念 定时器是Javascript中的一个常见功能,可以在特定的时间间隔内执行一段代码。 1.2 用途 定时器的主要用途有: 1.实现动画效果 2.定时发送请求 3.延时加载 二. 方块移动 下面是一个实现控制方块移动的示例说明: 2.1 H…

    JavaScript 2023年6月11日
    00
  • PHPCMS 模板制作教程 黑夜之舞出品

    PHPCMS 模板制作教程 黑夜之舞出品 1. 简介 PHPCMS是一款免费开源的内容管理系统,主要用于建立网站和博客等应用,其模板制作具有高度的灵活性,可以满足不同需求的网站设计。本教程将带领您一步步完成PHPCMS模板制作的全过程。 2. 安装和配置 首先需要安装PHPCMS系统,可以从官方网站下载(http://www.phpcms.cn/downlo…

    JavaScript 2023年5月19日
    00
  • JS使用插件cryptojs进行加密解密数据实例

    JS使用插件cryptojs进行加密解密数据实例 1. 什么是cryptojs? cryptojs是一个JavaScript加密库,它提供了各种加密算法和哈希算法,如AES、DES、TripleDES、RC4、MD5、SHA1、SHA256等。cryptojs是一个标准的ES6模块,支持在浏览器和Node.js环境中使用。 2. 安装和引用cryptojs …

    JavaScript 2023年5月19日
    00
  • js中的原生网络请求解读

    JS 中的原生网络请求解读 在前端开发中,经常需要与服务器进行数据交互。其中最常用的方式就是通过网络请求来完成数据的获取和传输操作。JS 中提供了原生的网络请求 API,使得我们可以直接在代码中发送网络请求。本文将对 JS 中的原生网络请求进行详细讲解。 发送网络请求的方式 在 JS 中,我们可以使用以下两种方式来发送网络请求: 使用 XMLHttpRequ…

    JavaScript 2023年6月11日
    00
  • JS连接SQL数据库与ACCESS数据库的方法实例

    下面我来详细讲解JS连接SQL数据库与ACCESS数据库的方法实例的完整攻略。 一、连接SQL数据库 1. 安装node-mssql依赖 可以通过在命令行中输入以下命令安装: npm install mssql –save 2. 连接SQL Server数据库 在node.js中,需要使用mssql模块连接SQL Server数据库。下面是一个简单的示例:…

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