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创建自定义对象 创建Object实例添加属性和方法

    下面是“Javascript创建自定义对象 创建Object实例添加属性和方法”的完整攻略。 创建自定义对象 在Javascript中,可以通过构造函数创建自定义对象。它是一种特殊的函数,可以用来创建具有特定属性和方法的对象。以下是创建自定义对象的示例代码: function Person(name, age) { this.name = name; thi…

    JavaScript 2023年5月27日
    00
  • C# DropDownList中点击打开新窗口的方法

    下面是“C# DropDownList中点击打开新窗口的方法”的完整攻略。 1. 确定目标页面和传递参数 首先需要确定要打开的目标页面以及要传递给目标页面的参数,例如,我们要打开的目标页面为“TargetPage.aspx”,要传递的参数为“id=123”。 2. 将DropDownList设置为自动PostBack模式 为了使DropDownList选择项…

    JavaScript 2023年6月11日
    00
  • js中string之正则表达式replace方法详解

    JS中String之正则表达式replace方法详解 什么是正则表达式 正则表达式可以理解为是一种匹配文本模式的规则。使用正则表达式可以方便地进行文本操作,如查找、替换、匹配等。在JavaScript中,可以使用RegExp对象来表示正则表达式。 replace方法概述 字符串的replace()方法可以用来替换字符串中的文本。它可以接受两个参数,第一个参数…

    JavaScript 2023年5月28日
    00
  • Javascript使用function创建类的两种方法(推荐)

    使用 function 创建类的方法,也被称作“构造函数模式”,是JavaScript中一种常用的定义对象的方法。 方法1:直接创建 我们可以使用function语法,按照类定义对象的基本思路,创建一个构造函数(类)。在构造函数(类)内部使用this关键字声明该类的实例属性和方法。 下面的代码演示了这种方式创建类Person,并定义了实例属性name和age…

    JavaScript 2023年5月27日
    00
  • ajax中data传参的两种方式分析

    当使用 AJAX 进行数据交互时,我们需要将请求的数据传递给后端进行处理。在 jQuery 中,可以通过 data 参数来传递数据。一般来说,data 传参的方式有两种:对象字面量和序列化字符串。下面分别进行详细讲解: 对象字面量的方式 对象字面量的方式是通过 JavaScript 中对象的方式来定义数据,然后传递给后端。例如: $.ajax({ url: …

    JavaScript 2023年6月11日
    00
  • js正则表达式注册页面表单验证

    关于JS正则表达式注册页面表单验证的完整攻略,我准备了以下内容。 什么是正则表达式 正则表达式是一种用来匹配字符串的方式,它可以进行规则匹配,检查一个字符串是否符合某种规则。在JS中,可以使用RegExp对象创建和使用正则表达式。 正则表达式常用语法 以下是正则表达式常见的语法,了解这些语法对于理解下面的示例非常有帮助: 语法 描述 ^ 行的开头 $ 行的结…

    JavaScript 2023年5月19日
    00
  • 编写跨浏览器的javascript代码必备[js多浏览器兼容写法]

    编写跨浏览器的JavaScript代码必备-完整攻略 什么是跨浏览器JavaScript? 跨浏览器JavaScript意味着编写能够在不同浏览器上运行的代码,这是JavaScript编程时最常见的问题之一。不同浏览器可能支持不同的JavaScript版本或API,因此代码运行在一个浏览器上可能会出错在另一个浏览器上,这给一些开发者带来了很大的困扰。 为了解…

    JavaScript 2023年5月17日
    00
  • 用jscript实现新建和保存一个word文档

    使用JScript在Windows操作系统上创建和保存Word文档需要用到Microsoft Word应用程序和其对象库的API。下面是操作的具体步骤: 步骤一:在计算机上安装Microsoft Word软件,确保Word的COM对象库已经注册。 步骤二:在JScript中创建Word应用程序对象,即创建Word对象,并检查是否创建成功: var wordA…

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