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

下面是“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日

相关文章

  • JSON.stringify的多种用法总结

    现在我来为你详细讲解一下“JSON.stringify的多种用法总结”的完整攻略。 JSON.stringify的多种用法总结 定义 JSON.stringify() 方法将 JavaScript 值转换为 JSON 字符串。 该方法可以接受三个参数:要序列化的JavaScript对象、替换值的函数、以及结果包含的对象的属性。通常我们只需要传入第一个参数即可…

    JavaScript 2023年5月27日
    00
  • 将json对象转换为字符串的方法

    将JSON对象转换为字符串通常使用JSON.stringify()方法,以下是该方法的完整攻略: 1. JSON.stringify()方法的语法 JSON.stringify()方法的语法如下: JSON.stringify(value[, replacer[, space]]) 其中,value参数表示待转换的JSON对象,必选且只能是以下类型之一:- …

    JavaScript 2023年5月27日
    00
  • jquery实现初次打开有动画效果的网页TAB切换代码

    下面是详细的攻略: 需求分析 需要用jquery实现一个带有切换动画效果的网页TAB切换功能。具体要求如下: 初次加载页面时,选中第一个TAB页面,其他TAB页面隐藏。 点击某个TAB按钮时,该按钮对应的TAB页面显示,并向左边滑动展示。 再次点击该TAB按钮时,该页面向右边滑动隐藏。 代码实现 实现思路: 通过jquery选择器找到所有的TAB按钮和页面元…

    JavaScript 2023年6月10日
    00
  • JavaScript实现五子棋游戏的方法详解

    JavaScript实现五子棋游戏的方法详解 五子棋游戏是一种流行的棋类游戏,通过JavaScript可以很方便地实现这个游戏。本文将详细讲解如何使用JavaScript实现五子棋游戏,并提供两个示例,帮助初学者更好地理解。 准备工作 在开始编写五子棋游戏之前,我们需要准备一些基本的工作,包括: 创建HTML页面:这是显示游戏界面的必要步骤。可以创建一个空的…

    JavaScript 2023年5月28日
    00
  • 前端使用JSON.stringify实现深拷贝的巨坑详解

    首先,需要明确深拷贝和浅拷贝的概念。 在JavaScript中,对象的赋值有两种方式:深拷贝和浅拷贝。浅拷贝只是将对象的引用复制给了新的变量,而深拷贝则是递归地复制对象及所有嵌套的子对象。 JSON.stringify可以将一个JavaScript对象序列化成一个JSON字符串,而JSON.parse则可以将一个JSON字符串反序列化成一个JavaScrip…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript如何优雅地实现创建多维数组

    JavaScript如何优雅地实现创建多维数组 在JavaScript中,创建多维数组可以使用嵌套的数组方式实现,但这种方式不够优雅,可以使用ES6的Array.from()方法和reduce()方法来实现创建多维数组。 使用Array.from()方法创建多维数组 Array.from()方法可以将一个类似数组或可迭代对象转化为一个真正的数组。这个方法接受…

    JavaScript 2023年5月27日
    00
  • JavaScript 滚轮事件使用说明

    下面为大家详细讲解JavaScript滚轮事件使用说明的完整攻略。 一、什么是JavaScript滚轮事件 JavaScript可以监听各种用户输入事件,其中包括鼠标滚轮事件。鼠标滚轮事件通常用来控制页面或者应用的滚动条滚动,也可以用来做一些交互效果。 二、滚轮事件原理 鼠标滚轮事件原理和其他鼠标事件类似,需要通过事件监听和回调函数来实现。当鼠标滚轮发生滚动…

    JavaScript 2023年6月10日
    00
  • 使用微信小程序API,调用微信的各种内置能力。

    下面是使用微信小程序API,调用微信的各种内置能力的完整攻略: 确认需要调用的API 首先需要确认你需要调用哪些API来实现你的功能。在微信小程序官方文档中,有一份与“微信小程序API能力”相关的内容提供了详细文档,我们可以通过这份文档快速找到需要的API。 引入API 在需要使用API的页面或程序中,需要先引入对应的API。引入API的方法一般如下: co…

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