JavaScript 箭头函数

news2024/11/18 13:37:10
(许多人所谓的成熟,不过是被习俗磨去了棱角,变得世故而实际了。那不是成熟,而是精神的早衰和个性的消亡。真正的成熟,应当是独特个性的形成,真实自我的发现,精神上的结果和丰收。——周国平)

在这里插入图片描述

箭头函数

箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,super。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。

箭头函数特点

1. 不需要编写funtion,而是"=>"这种更简单的箭头替代

const fun = function () {
  console.log('普通函数');
};
const fun2 = () => {
  console.log('箭头函数');
};
fun();
fun2();

2. 箭头函数没有自己的this,而是向上查找

更确切的说是箭头函数的外层如果有普通函数,那么箭头函数的this就是这个外层的普通函数的this,箭头函数的外层如果没有普通函数,那么箭头函数的this就是全局变量。

const Person = function () {
  this.age = 0;

  setInterval(function () {
    this.age++; // 由于setInterval属于全局,此时的this属于全局
    console.log(this.age);
  }, 1000);
};
new Person();

// 为了解决上面的问题,可以单独定义一个that来解决
const Person2 = function () {
  this.age = 0;
  const that = this;
  setInterval(function () {
    that.age++; // 由于使用的是that,that指向外层的this,所以正常运行
    console.log(that.age);
  }, 1000);
};
new Person2();

// 有了箭头函数就更简单了,不需要定义that
const Person3 = function () {
  this.age = 0;
  setInterval(() => {
    this.age++; // 由于使用了箭头函数,箭头函数自身没有this,所以指向了外层函数的this
    console.log(this.age);
  }, 1000);
};
new Person3();

3. 箭头函数没有arguments

arguments 是一个对应于传递给函数的参数的类数组对象。
可以看出,因为箭头函数自身没有arguments,所以它的arguments指向了外层函数的arguments。而普通函数有自己的arguments,所以能打印出4。

const func1 = function (a, b, c) {
  const fun2 = function (d, e, f) {
    console.log(arguments[0]);
  };
  fun2(4, 5, 6);
}

func1(1, 2, 3);

const func2 = function (a, b, c) {
  const fun3 = (d, e, f) => {
    console.log(arguments[0]);
  };
  fun3(4, 5, 6);
}

func2(1, 2, 3);

那么如何解决这个问题?

  1. 使用剩余参数,一个类数组的入参结构
  2. 使用显式参数,也就是入参的参数名
const func1 = function (a, b, c) {
  const fun2 = function (...arg) {
    console.log(arg[0]);
  };
  fun2(4, 5, 6);
}

func1(1, 2, 3);

const func2 = function (a, b, c) {
  const fun3 = (...arg) => {
    console.log(arg[0]);
  };
  fun3(4, 5, 6);
}

func2(1, 2, 3);

const func3 = function (a, b, c) {
  const fun4 = (d, e, f) => {
    console.log(d);
  };
  fun4(4, 5, 6);
}

func3(1, 2, 3);

4. 箭头函数不能使用new进行实例化

箭头函数除了不能new之外,它还没有prototype原型属性。
这是因为箭头函数没有this,就导致无法绑定实例。因为不能实例化成对象,所以就没有原型链了。

const Fun = () => { };
new Fun();
// TypeError: Fun is not a constructor

更高级的箭头函数

相比较传统的函数,箭头函数在部分场景下可以直接省去返回值和花括号,写法更简洁明了。

const list = [1, 2, 3];
const result = list.find((function (v) {
  if (v === 3) {
    return v;
  }
}))
console.log(result); // 3
const result2 = list.find((v) => v === 3);
console.log(result2); // 3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue|内置指令

Vue的内置指令是带有v-前缀的特殊属性,它的作用是当表达式的值改变时将其一系列连带影响,响应地作用于DOM元素。 推荐专栏:微信小程序实战开发专栏 内置指令v-text指令v-html指令v-cloak指令v-once指令v-pre指令 内置指令 开始前的准备&#…

虹科方案 | CEMEX 使用HK-Edgility 智能边缘计算平台简化其企业 WAN 管理和运营

一、应对价值 130 亿美元的跨国企业的网络挑战 “我们选择 Edgility 是因为其卓越的管理和协调功能,它为我们提供了一个端到端的工具集,可以经济高效地部署和管理我们边缘设备的生命周期。” —— Fernando Garcia -Villaraco Casero, CEMEX 全球IT 战略…

玩家必看!这三款简单好玩的免费小游戏平台!

在这个飞速发展和高度竞争的时代,人们的日程表已经被各种事情排满。时间的紧迫使得我们不可能一刻都停歇下来,正因为如此,我们才需要适当地放慢自己的步伐,寻找些许休闲娱乐的机会来放松自己。 现如今,越来越多的小游…

VSAN 6.7虚拟机精简置备盘空间不回收

原创作者:运维工程师 谢晋 VSAN 6.7虚拟机精简置备盘空间不回收 前提 前提 客户VSAN6.7环境,做了Horzion7.4,近期发现虚拟机存储空间越来越大,远远超过了已分配的磁盘空间大小,发现是数据写入系统内即使删除了数据…

25个著名的WordPress网站案例

想创建免费网站吗?从易服客建站平台开始 500M免费空间,可升级为20GB电子商务网站 创建免费网站 WordPress 内容管理系统为全球35%的网站提供支持。鉴于目前有 17 亿个站点,并且还在增加,您可以算出每秒向网站访问者提供内容的W…

【C++】map和set的介绍+使用

前言: 我们前面一起学习了二叉搜索树,这便是为了引入本章我们所学的map和set容器。map和set的底层实现就和二叉搜索树有关... 目录 (一)键值对的引入 (1)关联式容器 (2)键值对 …

NVIDIA GPU Driver, CUDA 和 PyTorch的版本关系

我们在进行深度学习环境配置的时候,会遇到各种各样的问题。有各种各样的驱动、包需要安装。不同驱动和包之间的还存在版本适配问题,刚入手的同学会一脸懵逼。配置环境成了入门的第一道门槛。我现在总结了NVIDIA 显卡 Anaconda资源库 PyTorch深度学习框…

Packet Tracer - 配置扩展 ACL - 场景 2

Packet Tracer - 配置扩展 ACL - 场景 2 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 RTA G0/0 10.101.117.49 255.255.255.248 不适用 G0/1 10.101.117.33 255.255.255.240 不适用 G0/2 10.101.117.1 255.255.255.224 不适用 PCA NIC 10.101…

No primary or single public constructor found for interface java.util.List

我的爆错原因是途中ids忘记标注注解PathVariable了,因为要传入一系列的整数的列表对象到路径/emps/deleteEmps/{ids}中,所以我这里就是加上注解PathVariable就OK了。

TAPD使用规范

目录 https://www.bilibili.com/?spm_id_from333.788.0.0我该如何理解这段网址? ?spm_id_from333.788.0.0:表示查询字符串,用于向服务器传递额外的参数信息。在这个例子中,该查询字符串可能用于追踪网站访问来源或统计数据分析…

windows权限维持之计划任务

schtasks常用参数: /Create 创建新计划任务。 /Delete 删除计划任务。 /Query 显示所有计划任务。 /Change 更改计划任务属性。 /Run 按需运行计划任务。 /End 中止当前正在运行的计划任务。 …

会声会影2023旗舰版升级更新及新增功能讲解

会声会影2023新版增加了众多新功能,在海外同样引起了很多关注。每年会声会影更新他都会制作一条,今年的你也不容错过,相信你看完对2023版会声会影将更有兴趣升级~ 建议2022版之前的老朋友,一定要升级2023版,在程序的性…

Linux的字符集及编码

Linux 字符集设置 1、查询 (1) 查看当前服务器字符集: # locale (2) 查看服务器支持的字符集: # locale -a 2、修改linux系统字符集的方式有如下两种: (1) 直接设置变量的方式修改,命令如下两条命令: [root~]# LANG"xxx" 或者…

人脉社交社群运营系统源码

人脉社交社群运营需要注意以下几个方面: 社群定位:要明确社群的目标人群、服务内容和特点,以便吸引到符合社群需求的用户。 内容策划:需要提供丰富、有趣、有价值的内容,如文章、图片、视频等,以增…

鸿蒙Hi3861学习八-Huawei LiteOS(事件标记)

一、简介 事件是一种实现任务间通信的机制,可用于实现任务间的同步。但事件通信只能是事件类型的通信,无数据传输。一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒…

​#立夏# 气温升高,3招提高电路板的散热效率!

电路板是电子设备的核心,上面安装了各种元器件,如电阻、芯片、三极管等。这些元器件在工作时都会产生一定的热量,从而使电路板的温度升高。如果不及时将这些热量散发出去,电路板就会过热,影响元器件的性能、可靠性和寿…

Mysql进阶(一)Mysql执行流程与架构

文章目录 一句查询语句是如何执行的?通信协议通信方式查询缓存词法语法解析和预处理(解析器、预处理器)查询优化器与查询执行计划什么是优化器优化器可以做什么优化器执行结果 存储引擎基本介绍存储引擎比较如何选择存储引擎 一条更新SQL是如…

java语法(一)基本概念、数据类型、字符串类、集合

文章目录 java程序运行流程JDK、JRE、JVM的关系 java数据类型基本数据类型基本数据类型之间的转换 引用数据类型数组类Java Bean重写 equals和hashcode 接口接口与类之间的关系 内置包装类装箱和拆箱包装类的应用Object类toString()equals()方法getClass() 方法接收任意引用类型…

【蓝桥杯选拔赛真题56】Scratch画笔涂色 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch画笔涂色 一、题目要求 编程实现 二、案例分析 1、角色分析

STM32 匿名助手提升电机控制调试效率(下位机代码和上位机操作演示)

目录 前言 通信协议选择 上位机配置实现 下位机代码实现 通信效果演示 总结 前言 前面介绍了通过VOFA上传变量并显示成波形方便调试的方法,VOFA上传的是浮点,一个浮点需要4个byte才能够表示,这对本就不是很快的串口带来说有不小负担&am…