什么是箭头函数 (Arrow Function)?跟一般的函数有什么差別?

文章目录

  • 什么是箭头函数 (Arrow Function)?跟一般的函数有什么差別?
    • 1.语法更为简单
    • 2.this值和一般函数不同
    • 3.没有自己的arguments
    • 4.不能作为构造函数使用

什么是箭头函数 (Arrow Function)?跟一般的函数有什么差別?

箭头函数和一般函数的主要差异有四点,我们将在下方详细说明:

  • 箭头函数语法不同,写法更为简单
  • 箭头函数没有自己的 this,也无法直接修改 this 指向
  • 箭头函数没有自己的 arguments
  • 箭头函数不能作为构造函数使用

1.语法更为简单

箭头函数相比较一般函数,语法相当简单。除了少去 function 关键字,如果只有一个参数,箭头函数可以省略括号;只有一行代码,就是直接简单返回一個变数或简单的表达式,可以省略大括号和return。例子如下:

// ES5 一般函数letaddOne=function(n){returnn+1;};// ES6 箭头函数,参数只有一个时,参数的括号可以省略letaddOne=(n)=>{returnn+1;};// ES6 箭头函式,只有一行时,省略大括号和 returnletaddOne=(n)=>n+1;

2.this值和一般函数不同

配合前置查看:如何解释JavaScript 中 this 的值?

箭头函数没有自己的this值,箭头函数的this值是在一开始定义就決定,永远会是最接近自己的外层的普通函数中的this值。

此外,箭头函数也不适合使用 call、apply 和 bind 来绑定this值,绑定值会无效。

一般函数 this 绑定例子如下 :

constobj={num:100,};window.num=2020;constadd=function(a,b,c){returnthis.num+a+b+c;};//绑定 this 值为 obj,obj 的 num 为 100,所以 resultCall 是 106constresultCall=add.call(obj,1,2,3);console.log(resultCall);// 106

this 绑定会无效,以下为例子

constobj={num:100,};window.num=2020;constadd=(a,b,c)=>this.num+a+b+c;// 绑定 this 无效,add 函数的 this 会是 window// 所以 num 会是 2020,resultCall 则是 2026console.log(add.call(obj,1,2,3));// 2026

箭头函数根本没有自己的 this,call/apply/bind 对它不生效,非严格模式下,当前这个箭头函数 this 的上一层是 Window

利用箭头函数没有自己的this值的特性,很适合用在 setTimeout() 和 EventTarget.prototype.addEventListener() 等方法当中,因为它可以自动绑定在合适的范围中。可以看到下方setTimeout当中,用一般函数中用箭头函数的this区别:

// 一般函式版本,this 值在这个情况下是 NaNconstobj={count:10,doSomethingLater(){setTimeout(function(){// 此 function 为一般函数,因此 this 指向 windowthis.count++;console.log(this.count);// NaN (因为在 windonw 中没有 count)},300);},};obj.doSomethingLater();// 箭头函数版本constobj={count:10,doSomethingLater(){// 此 function 为箭头函数,因此 this 会依据最接近的父层一般函数的 this 值,这里为 objsetTimeout(()=>{this.count++;console.log(this.count);// 11 (obj 的 count 原本是 10,10++ 会是 11)},300);},};obj.doSomethingLater();

3.没有自己的arguments

前置知识 arguments:

arguments 是“函数在运行时,自动生成的一个类数组对象”,里面保存了你调用这个函数时传入的所有实参。

当你调用一个普通函数时(不是箭头函数的时候)

function foo(a, b) { console.log(arguments); } foo(1, 2, 3); //JS 引擎会在函数内部偷偷给你一个东西: arguments = { 0: 1, 1: 2, 2: 3, length: 3 }

arguments 是类数组对象,不是数组

arguments.length;// ✅arguments[0];// ✅arguments.map();// ❌

拓展知识 rest参数:

arguments 是旧写法,类数组,现代写法是 剩余参数(rest parameter),得到的是真正的数组

functionfn(a,b,...rest){console.log(a);// 第一个console.log(b);// 第二个console.log(rest);// 剩下的}fn(1,2,3,4,5);12[3,4,5]// 当然了可以直接写functionfn(...rest){console.log(rest);// 剩下的}[1,2,3,4,5]

箭头函数没有arguments对象,但好处是,箭头函数可以获取最近的非箭头函数的arguments对象,如下例子

constarguments=[1,2,3];constarr=()=>arguments[0];arr();// 1// 一般函数有 arguments 对象,就是传入的参数,在这个的一般函数 arguments 是 [3]// 所以 arguments[0] 也会是 3// f() 则会是 3 + 3functionfoo(n){constf=()=>arguments[0]+n;returnf();}foo(3);// 3 + 3 = 6

如果需要使用到箭头函数的所有参数,可以用以下剩余参数(rest parameter)的写法得到

4.不能作为构造函数使用

箭头函数不能作为构造函数使用,换言之不能用new关键字调用,会报错

constarrowFun=()=>{};newarrowFun();// error: arrowFun is not a constructor

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

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

相关文章

导师推荐2026 TOP10 AI论文软件:自考毕业论文写作全测评

导师推荐2026 TOP10 AI论文软件:自考毕业论文写作全测评 2026年自考论文写作工具测评:为何需要一份权威榜单? 随着人工智能技术的不断进步,AI论文软件逐渐成为自考学生提升写作效率、优化内容质量的重要辅助工具。然而&#xff0c…

2026年苏州装修公司排名:聊聊金螳螂家装修团队专业吗?

本榜单依托全维度市场调研与真实业主口碑,深度筛选出五家家装领域标杆企业,聚焦业主关心的团队专业度、设计水平、消费透明度三大核心痛点,为家装需求者提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:金螳…

现金流2.5亿,市占率第一的德适生物公司怎么样,值得投资吗?

在AI医疗赛道加速扩容、国产医疗科技持续突破的背景下,国内染色体核型分析龙头、国家级专精特新“小巨人”企业德适生物,正以清晰的成长路径冲刺港交所,其在财务表现、技术创新、市场布局及人才储备等方面的多重核心…

实测5个免费降ai率工具推荐,2026届毕业生必看!降低ai率更轻松

说实话,最近这几个月,大家的日子都不好过。学校查重系统升级,降ai成了毕业季最大的拦路虎。 很多同学跟我吐槽,自己辛辛苦苦写的,一查论文降aigc全是红的。为了降低ai率,头发都掉了一把。市面上到处都是免费降ai…

深入解析:《Python 装饰器模式与代理模式深度剖析:从语法技巧到架构实战》

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

VP引导定位软件-下相机九点标定

VP引导定位软件-下相机九点标定

C的qsort()_C++STL的sort()_priority_queueStruct, vectorStruct, cmp 的cmp()函数排序规则总结辨析

邪门的记忆方法 qsort函数的cmp用item1>item2比较,sort函数的cmp用item1<item2比较,这样排序完是升序,反之降序 因为qsort和sort根据返回值有相反的判断。qsort在cmp返回值大于0会换顺序,而sort在cmp返回值大…

电商运营必备 多款实用呼叫中心系统推荐

电商呼叫中心早已超越单纯的 “问题解决渠道” 定位,成为贯穿消费全链路的核心价值触点。在售前咨询阶段,它能快速响应用户疑问、打消购买顾虑,直接推动转化率提升;在售后环节,高效的问题处理能建立用户信任,为复…

凝胶电泳仪/琼脂糖电泳仪选购指南:实力制造商、品牌推荐与性价比全解析

凝胶电泳技术是分子生物学、遗传学、生物化学和法医学等领域的基础核心分析手段,如同DNA测序前的“分子标尺”。该技术利用带电生物大分子(如DNA、RNA、蛋白质)在电场中于凝胶介质(琼脂糖或聚丙烯酰胺)内的迁移速…

Jmeter+influxdb+grafana 性能测试结果监控

我们做性能测试的时候使用Jmeter自身的监听器统计压测结果虽然可以统计到各个维度的信息&#xff0c;比如TPS&#xff0c;RT&#xff0c;Err等&#xff0c;但是这个Jmeter本身的监控没有办法做存储&#xff0c;也没有办法去找历史数据&#xff0c;所以如果想要持久化储存数据&a…

一文3000字用Postman从0到1实现UI自动化测试

Postman不是做接口测试的吗&#xff1f;为什么还能做UI自动化测试呢&#xff1f; 其实&#xff0c;只要你了解Selenium的运行原理&#xff0c;就可以理解为什么Postman也能实现UI自动化测试了。 Selenium底层原理 运行代码&#xff0c;启动浏览器后&#xff0c;webdriver会将…

自动化测试框架搭建全过程

前段时间写了一系列自动化测试相关的文章&#xff0c;当然更多的是方法和解决问题的思路角度去阐述我的一些观点。这篇文章来聊聊新手如何从零到一落地实践接口自动化测试。 为什么要做接口测试 测试理念的演变 早些时候&#xff0c;软件研发交付流程大多遵循V型或W型的瀑布…

牛批了,流程图工具,免费实用

今天给大家推荐两款工具&#xff0c;一款是流程图工具&#xff0c;一款是系统安装工具&#xff0c;有需要的小伙伴可以下载收藏。 第一款&#xff1a;draw.io 提到画流程图的工具&#xff0c;很多人第一个想到的是visio&#xff0c;这款软件安装Office时选择visio组件安装即可&…

转转测试环境docker化实践

测试环境对于任何一个软件公司来讲&#xff0c;都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境docker稳定环境环境体系。期间环境系统不断的演进&#xff0c;去适应转转集群扩张、新业务的扩展&#xff0c;走了一些…

数据分析笔记09:Python条件语循环 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JExten:基于Java模块系统(JPMS)构建健壮的插件架构

在Java中构建可扩展应用程序时,开发者常常从一个简单的问题开始:"如何让用户无需重新编译核心应用程序就能添加功能?" 旅程通常始于标准的 java.util.ServiceLoader,它提供了一种发现接口实现的简单机制…

2025年上海盐雾试验箱厂商综合实力排行榜单,砂尘试验箱/高低温交变量热试验箱,盐雾试验箱源头厂家口碑推荐榜

在制造业加速向智能化、精密化转型的背景下,盐雾试验箱作为环境可靠性测试的核心设备,其性能稳定性与技术服务能力直接影响产品质量验证的准确性。当前行业面临技术同质化严重、售后服务响应滞后等痛点,企业需通过技…