JavaScript中箭头函数与普通函数的区别详解

yizhihongxing

下面是“JavaScript中箭头函数与普通函数的区别详解”的完整攻略。

一、前言

在ES6的时代,随着箭头函数的引入,它逐渐被越来越多的开发者所使用,那么箭头函数和普通函数又有何区别呢?接下来,我们将从诸如函数内部的this、arguments、new、原型等角度来详细讲解两种函数的异同。

二、this

普通函数中的this是由函数的调用方式动态绑定的,而且this的值是在函数执行时才能确定的。

function Person() { 
  this.name = '小明';
  this.hello = function() {
    console.log('我的名字是' + this.name);
  }
}

var p = new Person(); 
p.hello(); // 输出:“我的名字是小明”

当我们将上述代码修改为箭头函数时,this的绑定方式发生了改变,this指向箭头函数所在的上下文。(这里指window)

function Person() { 
  this.name = '小明';
  this.hello = () => {
    console.log('我的名字是' + this.name);
  }
}

var p = new Person(); 
p.hello(); // 输出:“我的名字是undefined”

三、arguments

在普通函数中,arguments是一个类数组对象,它包含函数调用时传入的所有实参。而在箭头函数中,arguments是不存在的,但是可以通过展开操作符(...)获取函数调用时的实参。

function sum(a, b) { 
  console.log(arguments); // 输出:Arguments { '0': 1, '1': 2 }
}

sum(1, 2);

const sum2 = (a, b) => {
  console.log(...arguments); // 输出:1 2
}

sum2(1, 2);

四、new

在普通函数中,用new关键字调用时,函数将被作为构造函数执行,this指向新创建的实例对象。

function Person(name) { 
  this.name = name;
}

var p = new Person('小明'); 
console.log(p.name); // 输出:“小明”

而在箭头函数中,不能用new关键字调用,因为箭头函数没有prototype属性。

五、原型

在普通函数中,构造函数创建的实例对象通过__proto__属性继承构造函数的prototype,从而继承了构造函数原型上的方法。

function Person(name) { 
  this.name = name;
}

Person.prototype.hello = function(){
  console.log('我的名字是' + this.name);
}

var p = new Person('小明'); 
p.hello(); // 输出:“我的名字是小明”

而在箭头函数中,没有prototype属性,也就不存在原型的概念。

六、总结

通过本文的讲解,我们可以看出了普通函数和箭头函数存在许多的区别,它们之间的最大区别就是this的绑定方式不同。因此,在使用箭头函数的时候,我们需要注意上下文的继承和调用方式的限制。最后,我们来看一下什么情况下可以使用箭头函数:

  • 箭头函数体非常简单,可以写成一行返回语句。
  • 需要使用非常简单的逻辑来绑定this。

至此,“JavaScript中箭头函数与普通函数的区别详解”结束。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中箭头函数与普通函数的区别详解 - Python技术站

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

相关文章

  • JS实现的网页倒计时数字时钟效果

    JS实现的网页倒计时数字时钟效果的攻略如下: 需求 我们需要一个Web页面上实现一个倒计时数字时钟效果。 设计思路 生成HTML结构 使用CSS样式美化数字 使用JS实现倒计时功能 使用JS更新HTML内容 HTML代码 <div class="countdown"> <span id="days"&…

    JavaScript 2023年5月27日
    00
  • JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法

    JS中的hasOwnProperty()方法是用来检测一个属性是否是某个对象的自有属性的方法。它是基于原型链的继承机制的,只有当所查询的属性是对象本身的属性时才会返回true。 语法: object.hasOwnProperty(prop) 其中object是必需的,表示要检查属性的对象,prop参数也是必需的,表示要检查的属性名称,传入的参数是字符串类型。…

    JavaScript 2023年6月10日
    00
  • 今天分享几个少见却很有用的 JS 技巧

    今天分享几个少见却很有用的 JS 技巧 技巧一:使用逻辑运算符对变量进行赋值 在 JavaScript 中,逻辑运算符可以用来对变量进行赋值。比如,我们想要将一个变量的值限制在某一范围内,可以使用以下方式: var num = 5; num = (num <= 10) ? num : 10; console.log(num); // 输出5 num =…

    JavaScript 2023年5月18日
    00
  • jQuery使用animate创建动画用法实例

    下面是详细讲解jQuery使用animate创建动画的攻略。 什么是jQuery animate? jQuery animate是一种创建动画的方式,它可以让元素以自然且流畅的方式进行动画效果,比如让元素缓慢地移动、旋转等。 animate()方法的语法 animate()方法的语法如下: jQuery(selector).animate(styles, s…

    JavaScript 2023年6月10日
    00
  • PowerShell中执行Javascript的方法示例

    要在PowerShell中执行JavaScript代码,可以使用以下步骤: 安装Node.js:Node.js是一个能够执行JavaScript代码的平台,可以在官网 https://nodejs.org/en/ 上下载安装包并进行安装。 在PowerShell中安装Node.js模块:在PowerShell中安装Node.js模块,可以使用以下指令: np…

    JavaScript 2023年6月10日
    00
  • Validform+layer实现漂亮的表单验证特效

    下面我将详细讲解如何使用Validform和layer实现漂亮的表单验证特效。攻略分为以下几个步骤: 步骤一:引入相关JavaScript文件 首先,在HTML页面中引入Validform和layer的相关JavaScript文件。你可以在官网下载这两个文件,也可以使用CDN加速。以下是引入CDN加速文件的示例代码: <script type=&quo…

    JavaScript 2023年6月10日
    00
  • 常用JS加密编码算法代码第2/2页

    “常用JS加密编码算法代码第2/2页”是一篇介绍常用JS加密和编码算法的文章,其中包含了完整的代码示例。为了更好地理解和使用这些算法,可以按照以下步骤进行操作: 阅读文章,理解各种加密和编码算法的原理和用途。文章中提到了几种常用的算法,包括Base64编码、MD5加密、SHA1加密、AES加密等,在使用这些算法之前,需要先理解其基本原理。 下载代码示例,并在…

    JavaScript 2023年5月20日
    00
  • 详解用js代码触发dom事件的实现方案

    下面是详解用JS代码触发DOM事件的实现方案的攻略。 什么是DOM事件? DOM事件,是当用户与网页交互时产生的事件。例如,当用户点击鼠标、滚动页面或按下键盘时,都会触发DOM事件。 如何用JS代码触发DOM事件? 我们可以使用JS代码来模拟用户与网页交互,从而触发DOM事件。以下是三种JS代码触发DOM事件的实现方案: 利用dispatchEvent方法 …

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