JavaScript中的普通函数和箭头函数的区别和用法详解

介绍JavaScript中的普通函数和箭头函数的区别和用法,可以从以下几个方面进行详细的讲解:

普通函数和箭头函数的区别

语法结构

普通函数:

function add(a, b) {
  return a + b;
}

箭头函数:

const add = (a, b) => {
  return a + b;
}

this指向

普通函数的this指向调用它的对象,如果没有对象就指向全局对象window。

箭头函数中的this指向继承自外层普通函数最近一层的this,如果不存在外层普通函数,就指向全局对象window。

适用场景

普通函数适用于需要在函数内部改变this指向的场景,比如面向对象编程。

箭头函数适用于函数内部不需要改变this指向的场景,比如在数组的map、filter、reduce等方法中的回调函数。

箭头函数的用法

箭头函数的简洁语法

如果箭头函数只有一个参数和一条表达式时,可以省略参数括号和大括号。

例如下面两个函数是等价的:

const double = (x) => { return x * 2; }
const double = x => x * 2;

箭头函数作为回调函数

箭头函数作为回调函数,可以简化代码:

const arr = [1, 2, 3];
const doubleArr = arr.map(x => x * 2);
console.log(doubleArr);

箭头函数作为对象方法

箭头函数作为对象方法,不能绑定this,会继承外层普通函数的this。

const person = {
  name: 'Tom',
  sayHi: () => {
    console.log(`Hi, my name is ${this.name}`);
  }
}
person.sayHi(); // 输出 Hi, my name is undefined

示例说明

示例1:普通函数和箭头函数的语法和this指向

const obj = {
  name: 'Tom',
  normalFunc: function() {
    console.log(`this指向:${this}`);
  },
  arrowFunc: () => {
    console.log(`this指向:${this}`);
  }
};

obj.normalFunc();  // this指向:[object Object]
obj.arrowFunc();   // this指向:[object Window]

该示例中定义一个对象,包含了一个普通函数和一个箭头函数。在两个函数中分别调用console.log打印this指向。在normalFunc函数中,this指向的是调用它的对象obj;而在arrowFunc中,由于它没有属于自己的this,所以指向的是全局作用域下的this,即window对象。

示例2:箭头函数作为回调函数

const arr = [1, 2, 3];
const doubleArr = arr.map(x => x * 2);
console.log(doubleArr);  // 输出 [2, 4, 6]

该示例中使用数组的map方法和箭头函数,将数组中的每个元素乘以2,得到一个新的数组doubleArr。相比于使用普通函数,箭头函数的代码更加简洁。

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

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

相关文章

  • python 定时器每天就执行一次的实现代码

    Python中实现定时器每天只执行一次的功能,可以使用标准库中的datetime和time模块。下面是完整的攻略: 1.首先导入需要的库 import datetime import time 2.获取当前时间 now = datetime.datetime.now() 3.计算当前时间到第二天凌晨的时间差 tomorrow = now + datetime…

    JavaScript 2023年6月11日
    00
  • vue3中关于路由hash与History的设置

    下面是关于Vue3中路由hash与History的设置的详细攻略: 1. 路由设置 在Vue3中使用路由需要先安装vue-router,使用以下命令进行安装: npm install vue-router@4 1.1 history模式 如果使用history模式,则路由使用的是浏览器的history.pushState和history.replaceSta…

    JavaScript 2023年6月11日
    00
  • 详解Typescript 严格模式有多严格

    详解Typescript 严格模式有多严格 简介 Typescript 自2.3版本开始引入了“严格模式”(Strict mode),它通过加强类型检查、禁用一些不安全的语法和行为等手段来让代码更规范、更健壮,从而减少意外的运行时错误。 在这篇文章中,我们将详细讲解 Typescript 严格模式的多个方面,并给出一些示例代码来进一步说明各个模式之间的区别。…

    JavaScript 2023年6月10日
    00
  • js中cookie的添加、取值、删除示例代码

    下面是JS中操作Cookie的完整攻略,包括添加、取值、删除示例代码: 添加Cookie 在JS中添加Cookie,我们可以利用document.cookie来设置Cookie值。下面是添加Cookie的示例代码: function setCookie(cname, cvalue, exdays) { let d = new Date(); d.setTim…

    JavaScript 2023年6月11日
    00
  • JavaScript代码执行的先后顺序问题

    JavaScript代码执行的先后顺序问题是在JavaScript编程中经常会遇到的一个难点。为了更好地理解执行顺序,我们需要了解JavaScript代码执行的原理。 JavaScript代码执行的原理 JavaScript代码的执行顺序可以分为两种情况,一种是同步执行,一种是异步执行。 同步执行 同步执行是代码按顺序执行,从上到下依次执行。如果遇到代码阻塞…

    JavaScript 2023年5月27日
    00
  • JS获取并操作iframe中元素的方法

    JS获取并操作iframe中元素的方法可以分为以下几个步骤: 通过document.getElementById()获取iframe元素的引用。例如,若iframe元素的id为“myFrame”,则用下列代码获取它的引用: var myFrame = document.getElementById(‘myFrame’); 使用contentWindow属性获…

    JavaScript 2023年6月10日
    00
  • JavaScript结合AJAX_stream实现流式显示

    要实现流式显示,可以使用AJAX获取数据,并使用JavaScript动态添加元素。下面是实现流式显示的详细攻略。 前置要求 熟练掌握JavaScript和AJAX 熟悉HTML和CSS,了解DOM操作 有一定的编程经验 实现过程 步骤一:创建HTML页面 首先需要创建一个HTML页面,页面上需要一个用于展示数据的元素,例如一个<div>标签: &…

    JavaScript 2023年6月10日
    00
  • JS实现点击登录弹出窗口同时背景色渐变动画效果

    JS实现点击登录弹出窗口同时背景色渐变动画效果可以分为以下几个步骤: HTML结构的修改:需要在HTML中添加一个按钮和一个弹窗,同时要添加一个全屏蒙层,作为背景色渐变的动画效果。 <button id="loginBtn">登录</button> <div id="loginModal"…

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