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日

相关文章

  • 关于var在for循环遇到的问题解决

    关于var在for循环中遇到的问题解决可以从以下两点入手: 1、变量提升问题: 在ES5中,使用var声明变量时,会发生变量提升的问题。在for循环中使用var声明变量时,变量会被提升到外层作用域中,导致在循环中每一次循环所声明的变量并不是独立的,而是共享一个变量,从而导致循环结束后,该变量的值始终是最后一次循环的值。 解决方案是使用let或const关键字…

    JavaScript 2023年6月10日
    00
  • JS实现太极旋转思路分析

    下面是一份JS实现太极旋转的完整攻略。 1. 思路分析 太极旋转是一种常见的动画效果,其实现基本思路如下: 创建一个太极图形的HTML结构 使用CSS样式将其样式设置完成,达到一个静止的状态 使用JS来控制太极图形的旋转角度 具体实现过程中,其实旋转本质上是一个让元素不断改变其旋转角度的过程,我们可以通过JS创建一个变量来保存旋转角度的数值,每次修改该数值,…

    JavaScript 2023年6月11日
    00
  • JavaScript实现简单购物小表格

    下面是“JavaScript实现简单购物小表格”的完整攻略: 1.准备工作 在HTML中,首先要准备一个表格元素,代码如下: <table> <thead> <tr> <th>商品</th> <th>价格</th> <th>数量</th> <th…

    JavaScript 2023年6月11日
    00
  • JavaScript仿京东实现秒杀倒计时案例详解

    下面是关于“JavaScript仿京东实现秒杀倒计时案例详解”的完整攻略。 1. 准备工作 在开始仿京东实现秒杀倒计时案例之前,我们需要做一些准备工作。具体如下: 在HTML文件中引入所需的CSS文件和JavaScript文件; 创建一个用于显示倒计时的HTML标签,并设置其id属性; 在JavaScript文件中获取该HTML标签的id属性值,利用docu…

    JavaScript 2023年6月11日
    00
  • JavaScript前端面试组合函数

    JavaScript前端面试中,组合函数是一个常见的考点,如果能够掌握组合函数的概念、实现及应用,能够极大地提高我们面试的成功率。本篇文章将会详细讲解“组合函数”的相关知识点,并提供两个示例来进行说明。 什么是组合函数 组合函数指的是将多个函数组合成一个新的函数,新函数会按照一定的顺序调用这些子函数,并将每个子函数的返回值作为参数传递给下一个函数。组合函数可…

    JavaScript 2023年5月27日
    00
  • 使用JS正则表达式 替换括号,尖括号等

    使用JS正则表达式替换括号、尖括号等的完整攻略分为以下几个步骤: 定义正则表达式 使用replace()函数替换匹配到的字符串 将替换后的字符串返回 下面是两个示例说明: 示例一 我们要将以下HTML代码中的所有尖括号<、>用[]代替 <div class="container"> <h1>Welcom…

    JavaScript 2023年6月10日
    00
  • JavaScript cookie与session的使用及区别深入探究

    JavaScript Cookie与Session的使用及区别深入探究 概述 Web开发中,常常需要在用户与服务器之间保持状态,以便实现个性化的体验。在前后端分离的现代Web开发中,我们往往会在JavaScript中使用Cookie或Session来实现状态保持。而Cookie和Session虽然实现的目的相同,但它们的细节和机制存在很大的差异。在本文中,我…

    JavaScript 2023年6月11日
    00
  • ajax和jsonp跨域的原理本质详解

    针对“Ajax和JSONP跨域的原理本质”这一话题,我准备了以下的完整攻略。 一、同源策略 同源策略,是一种安全策略,它限制了一个源(域名、协议、端口)下的文档或脚本如何能与另一个源(域名、协议、端口)下的资源进行交互。 二、JSONP 跨域 JSONP是一种跨域的技术手段,发起JSONP请求时,服务器端返回指定格式的数据,并在响应中将需要返回的数据作为参数…

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