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

news2024/7/4 5:11:03

一.外形不同:箭头函数使用箭头定义,普通函数中没有
代码实例如下:

// 普通函数
function func(){
  // code
}
// 箭头函数
let func=()=>{
  // code
}

二.箭头函数都是匿名函数
普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。
代码实例如下:

// 具名函数
function func(){
  // code
}
 
// 匿名函数
let func=function(){
  // code
}

// 箭头函数全都是匿名函数
let func=()=>{
  // code
}

三.箭头函数不能用于构造函数,不能使用new
普通函数可以用于构造函数,以此创建对象实例。
代码实例如下:

function Person(name,age){
   this.name=name;
   this.age=age;
}
let admin=new Person("恩诺小弦",18);
console.log(admin.name);
console.log(admin.age);

代码运行如下:

 

Person用作构造函数,通过它可以创建实例化对象。
但是构造函数不能用作构造函数。

四.箭头函数中this的指向不同
在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。
1.箭头函数本身不创建this
也可以说箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用。
注意:this一旦被捕获,就不再发生变化
 

var webName="捕获成功";
let func=()=>{
  console.log(this.webName);
}
func();

运行结果

代码分析:箭头函数在全局作用域声明,所以它捕获全局作用域中的this,this指向window对象。

例子:

var name = "恩诺1";
function wrap(){
  this.name="恩诺2";
  let func=() => {
    console.log(this.name);
  }
  func();
}
let en=new wrap();

 

 代码分析:
(1)wrap()用作构造函数。
(2)使用new调用wrap()函数之后,此函数作用域中的this指向创建的实例化对象。
(3)箭头函数此时被声明,捕获这个this。
(4)所以打印的是恩诺2,而不是恩诺1。
2.结合call(),apply()方法使用
箭头函数结合call(),apply()方法调用一个函数时,只传入一个参数对this没有影响。
 

let obj2 = {
    a: 10,
    b: function(n) {
        let f = (n) => n + this.a;
        return f(n);
    },
    c: function(n) {
        let f = (n) => n + this.a;
        let m = {
            a: 20
        };
        return f.call(m,n);
    }
};
console.log(obj2.b(1));  // 结果:11
console.log(obj2.c(1)); // 结果:11

3.箭头函数不绑定arguments,取而代之用rest参数…解决
每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。但是箭头函数并没有此对象。

function A(a){
  console.log(arguments);
}
A(1,2,3,4,5,8);  //  [1, 2, 3, 4, 5, 8, callee: ƒ, Symbol(Symbol.iterator): ƒ]


let B = (b)=>{
  console.log(arguments);
}
B(2,92,32,32);   // Uncaught ReferenceError: arguments is not defined


let C = (...c) => {
  console.log(c);
}
C(3,82,32,11323);  // [3, 82, 32, 11323]

4.其他区别
(1).箭头函数不能Generator函数,不能使用yeild关键字。
(2).箭头函数不具有prototype原型对象。
(3).箭头函数不具有super。
(4).箭头函数不具有new.target。

总结:
(1).箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
(2).普通函数的this指向调用它的那个对象
 

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

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

相关文章

框架高级课程系列之Redis6笔记

文章目录前言NoSQL数据库简介技术发展NoSQL数据库NoSQL适用场景NoSQL不适用场景Redis概述安装配合关系型数据库做高速缓存多样的数据结构存储持久化数据Redis 安装准备工作:下载安装最新版的gcc编译器启动 Redis方式Redis 关闭方式Redis介绍相关知识常用五大数据类型…

如何利用python机器学习解决空间模拟与时间预测问题及经典案例分析

目录 专题一 机器学习原理与概述 专题二 Python编译工具组合安装教程 专题三 掌握Python语法及常见科学计算方法 专题四 机器学习数据清洗 专题五 机器学习与深度学习方法 专题六 机器学习空间模拟实践操作 专题七 机器学习时间预测实践操作 更多推荐 了解机器学习的发…

Web服务器TomCat快速入门(从安装到部署)

文章目录什么是Web服务器?相关概念基本使用下载安装卸载启动关闭配置部署📂橙子精品文章学习推荐什么是Web服务器? Web 服务器是一个应用程序,对 HTTP 协议的操作进行封装,使得程序员不必直接对协议进行操作&#xff…

【Linux 系统运维基础】Linux命令大全

Linux 命令大全立志列举出Linux中常用的所有命令(有很多命令不使用的话,很快会忘记哦)。 1. cd 目录前进/ 后缀 cd /表示跳转到根目录下,无论是哪个目录下,执行此命令后一定会跳转到根目录下。 cd ~ 表示跳转到主目录下。 cd . 表示跳转还…

【5.2】Nacos注册中心--服务多级存储模型

【【5.2】Nacos注册中心--服务多级存储模型1 Nacos服务多级存储模型2 服务跨集群调用问题3 配置集群属性4 总结1 Nacos服务多级存储模型 之前有服务的概念: 例如:提供用户查询的use-service和提供订单查询的order-service,它们都叫服务。 我…

Linux安装配置JDK安装运行Tomcat

Linux软件主流安装方式: tar:解压安装(前提将安装包下载下来) 安装包格式:tar,tar.gz,tar.bz 安装解压包命令: tar -zxvf 包名xxx rpm:直接安装,需要将安装包下载下来(好比双击window里的.exe文件) 安装包格式:rpm 安装命令:rpm -ivh 软件路径 卸载命令:rpm -e 软件包全名 y…

【GPLT 二阶题目集】L2-014 列车调度

火车站的列车调度铁轨的结构如下图所示。 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车&am…

(蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第1天】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有75天

🏆🏆🏆🏆🏆🏆🏆 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录&a…

2023年“华数杯”国际数模赛赛题浅析

2023华数杯如期开赛,本次比赛作为美赛的模拟赛,赛题和比赛时间都和美赛高度相似,因此大家 完全可以当作一次美赛之前的练习赛进行。美赛的发题时间与华数杯一致,都是早晨六点,现已经将机器翻译的初步翻译 结果进行了分…

Gdb调试复现Dirty Pipe漏洞(CVE-2022-0847)之内核态调试

第一、准备环节-增加内核调试辅助语句: 首先,为了更好的查看关键因素的变化:稍微做了两处修改: 第一处:splice前后,增加getchar和puts; 第二处:prepare pipe过程中,增加getchar和puts; 修改后代码执行结…

Spring Bean生命周期,就像人的一生

这篇我们来看一看Spring中Bean的生命周期,我发现,和人的一生真的很像。1 简单说说IoC和BeanIoC,控制反转,想必大家都知道,所谓的控制反转,就是把new对象的权利交给容器,所有的对象都被容器控制&…

利用STC15输出两路互补SPWM波形

利用STC15输出两路互补SPWM波形🎞逻辑分析仪信号采集演示: 🔖本案例使用的是IAP15W4K61S4验证。 📍相关篇《STC15系列PWM相关功能寄存器介绍》 📌相关开源PCB《【PCB开源分享】STC/IAP15W4K61S4开发板》 &#…

Linux(七)进程间通信

进程间是如何进行通信的? 通过前面的学习之后,我们知道进程间是具有独立性的,在操作系统的层面来看,进程就是一块pcb,是对运行中的程序动态运行过程的描述,在Linux角度下,进程就是一个task_stru…

2-2JVM-GC垃圾回收

GC垃圾回收 了解什么是垃圾回收掌握垃圾会回收的常见算法学习串行、并行、并发、G1垃圾收集器学习GC日志的可视化查看 1.什么是垃圾回收? 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内…

YOLOv5/v7 Falsk Web 监测平台 | YOLOv5/v7 Falsk Web 部署

YOLOv7 Falsk Web 监测平台图片效果展示 YOLOv7 Falsk Web 监测平台视频效果展示 YOLOv7 Flask Web 检测平台 什么是Flask? 简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开…

HTB_Jerry tomcat弱口令war包getshell

文章目录信息收集Tomcat war 包 getshell信息收集 扫描发现 8080 端口存在 tomcat 服务,访问 manage app 管理接口,需要输入账号密码 点击取消,看到默认账号密码,重新登录,登录成功,未修改 一般就是上传或…

JVM类加载

作用:负责从硬盘/网络中加载字节码信息,加载到内存中(运行时数据区的方法区中) 类加载过程: 加载 使用IO读取字节码文件,转换并存储 为每个类创建一个Class类的对象 存储在方法区中 链接(…

Jackson注解使用分析

文章目录Jackson常用注解1. 常用注解汇总2. 注解使用分析JsonIncludeJsonAnyGetterJsonAnySetterJsonNamingJsonAutoDetectJacksonInjectJsonAliasJsonValueJsonMergeJsonRawValueJsonEnumDefaultValueJsonFilterJsonSerializeJsonDeserializeJacksonAnnotationJacksonAnnotati…

excel合并技巧:查找函数遇到合并单元格怎么应对

大家都在期盼奖金的到来,可是核算奖金的同事正在苦恼,因为以前用得好好的VLOOKUP函数突然不合适了,很多人的奖金计算出来都变成了乱码:使用VLOOKUP函数每个部门只有第一行正确,其他都是乱码。看到这个表,相…

【服务器数据恢复】raid5硬盘离线后热备盘未启用的数据恢复案例

服务器数据恢复环境: 某品牌X3850服务器,组建的raid5磁盘阵列,该raid5磁盘阵列包含4块成员盘和1块热备盘。 服务器故障: 服务器在运行过程中由于未知原因突然崩溃,用户方工程师检查后发现该故障服务器raid5阵列中2块磁…