JavaScript普通函数与箭头函数有怎样的区别?

深度剖析 JS 的箭头函数 = > 与普通函数 function 的区别 ES6 中添加了箭头函数的规范,在常用的前端框架,如 Vue,也会经常使用到箭头函数,今天我们就来深度学习箭头函数(arrow function)。本文主要介绍箭头函数的概念,重点介绍它与普通函数(function)的区别,包括基本语法、this指向、使用场景等。 阅读详情

比较点

普通函数

箭头函数

具体案例

简写

/

箭头函数如果没有参数,同时函数体的返回值只有一句,则{}和return都可以省略。

1、函数简写

this指向

this总是指向调用它的对象,如果作为构造函数,它指向创建的对象实例

箭头函数的this指向的是父级作用域的this,是通过查找作用域链来确定 this 的值,也就是说看的是上下文的this,指向的是定义它的对象,而不是使用时所在的对象。

2、this指向

this改变

call()、apply()、bind()等方法能改函数中this的指向

call()、apply()、bind()等方法不能改变箭头函数中this的指向

3、改变this指向

构造函数

可以作为构造函数,用来创建对象实例

箭头函数不能作为构造函数使用

4、构造函数

arguments对象

每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。

箭头函数没有自己的arguments,取而代之用rest(剩余)参数...arg来解决

5、arguments与...args

prototype原型

具有prototype

没有prototype原型

6、prototype原型

1、箭头函数简写:

  • 箭头函数如果没有参数,同时函数体的返回值只有一句,则{}和return都可以省略
var fn = () => console.log("123");//去掉了{} 和 return
fn(); //'123'

2、this指向:

  • 普通函数中this指向的是调用它的对象,如果作为构造函数,它指向创建的对象实例
  • 箭头函数不会创建自己的this, 所以它没有自己的this,它只会在自己作用域的上一层继承this。所以箭头函数中this的指向在它在定义时已经确定了,之后不会改变。

普通函数中this指向的9大场景:

函数的调用方式

this指向

对象.函数( )

对象

函数( )

window

IIFE 立即执行函数

window

定时器

window

DOM事件处理函数

添加事件监听的元素

数组[下标 ]( )

数组

call(对象,arg1,arg2)

对象

apply(对象,arry)

对象

new 函数()

对象的实例

9大场景对应的案例代码,太多放不下,需要粉丝群获取。

箭头函数中this指向

箭头函数不会创建自己的this, 所以它没有自己的this,它只会在自己作用域的上一层继承this。所以箭头函数中this的指向在它在定义时已经确定了,之后不会改变。

<div id="box"></div>
<script>
   var fn = () => console.log(this); //window
   //var fn=function(){console.log(this);} // <div id="box"></div>
   document.getElementById("box").onclick = fn;
</script>

如果fn是普通函数,则this指向的是#box,如果是箭头函数,则this指向的是window

3、改变this指向

  • 普通函数通过调用call()、apply()、bind()可以改变this指向。
  • 箭头函数无法通过调用call()、apply()、bind()改变this指向。

普通函数

<script>
   const obj = {};
   function fn() {
       console.log(this);
  }
   fn(); //window
   fn.apply(obj); //obj  
   fn.call(obj); //obj
   fn.bind(obj)(); //obj
</script>

箭头函数

<script>
   const obj = {};
   const fn = () => console.log(this);
   fn(); //window
   fn.apply(obj); //window
   fn.call(obj); //window
   fn.bind(obj)(); //window
</script>

4、构造函数

  • 普通函数可以作为构造函数来创建对象实例
  • 箭头函数不能作为构造函数来使用,因为箭头函数没有自己的this

普通函数-用作构造函数

<script>
   function Person(name) {
       this.name = name;
  }
   const p = new Person("张三");
   console.log(p); //{name: '张三'}
</script>

箭头函数-用作构造函数会报错

<script>
   const fn = (a) => {
       console.log(a);
  };
   fn(1); //1
   console.log(new fn(1)); //Uncaught TypeError: fn is not a constructor
</script>

5、arguments与...args

  • 每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。
  • 箭头函数中访问arguments如果存在,则是来自于他的外层普通函数的arguments
  • 箭头函数没有自己的arguments对象,取而代之用rest(剩余)参数...args解决

普通函数中arguments

function sum(a) {
   console.log(arguments);
   console.log(arguments[0]);
}
sum(1, 2, 3);
//Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
//1  

箭头函数没有arguments对象

const sum = () => console.log(arguments);//arguments未定义
sum(); //Uncaught ReferenceError: arguments is not defined
  • 箭头函数中访问arguments如果存在,则是来自于他的外层普通函数的arguments
function a() {
   var b = () => console.log(arguments);//arguments是a函数中的
   b();
}
a(1, 2, 3); //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]

箭头函数中 ...args剩余参数

const sum = (a, ...args) => console.log(args);
sum(1, "a", "b", 3); // ['a', 'b', 3]

arguments包含实际传递的所有参数,...args是剩余参数,只能放在所有参数后,并且不包含剩余参数前的参数。以下是错误写法

const sum = (a, ...args,b) => console.log(args);

6、prototype原型

  • 普通函数具有prototype原型属性
  • 箭头函数没有prototype原型属性
<script>
   //箭头函数
   var a = () => 1;
   //普通函数
   function b() {
       return 2;
  }
   console.log(a.prototype); // undefined
   console.log(b.prototype); // {constructor: ƒ}
</script>

学习更多的JavaScript

如果你正在学习JS或者已经在我们的三十天计划中完成了4个综合项目实战,那不妨可以听下这个课程体系,三十天计划群里还提供了算法、数组等知识体系!

前端工程师成长方法

更多完整JavaScript课程体系在我们的系统班你有完整的呈现,包含了JavaScript基础篇、重点、算法、原理、面试题、实战案例讲解!同时也为你提供了前端高级工程师成长体系!(详细看下图内容)

如果需要深度学习的同学可以练习助理老师了解详细的课程以及课程的报名方式!(不定期会推出活动,有大额优惠券推出,活动详情联系助理老师了解即可!)如果你才开始学习前端,那么可以先学习我们的三十天计划(零基础的同学报名系统班同学可以和老师沟通制定学习计划,可以得到更快的成长!)

为帮助到一部分同学不走弯路,真正达到一线互联网大厂前端项目研发要求,首次实力宠粉,打造了《30天挑战学习计划》,内容如下:

HTML/HTML5,CSS/CSS3,JavaScript,真实企业项目开发,云服务器部署上线,从入门到精通

  • PC端项目开发(1个)
  • 移动WebApp开发(2个)
  • 多端响应式开发(1个)

共4大完整的项目开发 !一行一行代码带领实践开发,实际企业开发怎么做我们就是怎么做。从学习一开始就进入工作状态,省得浪费时间。

从学习一开始就同步使用 Git 进行项目代码的版本的管理,Markdown 记录学习笔记,包括真实大厂项目的开发标准和设计规范,命名规范,项目代码规范,SEO优化规范

从蓝湖UI设计稿 到 PC端,移动端,多端响应式开发项目开发

  • 真机调试,云服务部署上线;
  • Linux环境下 的 Nginx 部署,Nginx 性能优化;
  • Gzip 压缩,HTTPS 加密协议,域名服务器备案,解析;
  • 企业项目域名跳转的终极解决方案,多网站、多系统部署;
  • 使用 使用 Git 在线项目部署;

这些内容在《30天挑战学习计划》中每一个细节都有讲到,包含视频+图文教程+项目资料素材等。只为实力宠粉,真正一次掌握企业项目开发必备技能,不走弯路 !

过程中【不涉及】任何费用和利益,非诚勿扰 。

如果你没有添加助理老师微信,可以添加下方微信,说明要参加30天挑战学习计划,来自公众号!老师会邀请你进入学习,并给你发放相关资料。

30 天挑战学习计划 Web 前端从入门到实战 | arry老师的博客-艾编程

python实现序列比对之Needleman-wunsch算法 (附完整源码) 阅读详情

相关推荐

FPGA波束形成:从算法到硬件的艺术之旅

本文深入探讨了FPGA在波束形成技术中的应用,从算法原理到Verilog硬件实现的全过程。文章详细分析了FPGA并行处理、低延迟和可重构特性如何优化波束形成系统性能,并提供了Verilog关键模块代码示例和资源优化策略,为工程师实现高效FPGA波束形成解决方案提供实用指导。

tea88的博客 1046

JavaScript:箭头函数与普通函数的区别与适用场景

本文介绍了js中普通函数与箭头函数的区别与适用场景,并给出示例代码。

孙悟空 3530

SAP预扣税配置实战:从BP创建到外部接口集成的完整流程

本文详细拆解了SAP S/4HANA中预扣税配置与集成的完整实战流程。内容涵盖从业务伙伴(BP)架构下的数据存储理解、后台基础配置,到针对批量处理场景,如何绕过标准BAPI,采用直接更新核心表LFBW的策略进行高效开发。最后,文章探讨了与外部接口集成的多种模式与数据流设计,为财务顾问和ABAP开发人员提供了一套清晰、可落地的解决方案。

weixin_29204749的博客 417

js中箭头函数和普通函数区别

一.箭头函数和普通函数 箭头函数相当于匿名函数,并且简化了函数定义。 箭头函数有两种格式,一种只包含一个表达式,连{ … }和return都省略掉了。 还有一种可以包含多条语句,这时候就不能省略{ … }和return。 let fun = () => { console.log('111'); } function fun() { //普通函数 console.log('123'); } 二、箭头函数和普通函数的区别 1. 箭头函数不能作为构造函数,而普通函数可以: 箭头函

weixin_43190804的博客 5098

ANSYS APDL学习(6):ANSYS APDL部分命令流介绍

介绍APDL 部分命令流

娱乐至上的博客 1万+

告别配置烦恼!保姆级教程:在Windows 10/11上为QT5.14.2配置MSVC2017编译器(附VS2022组件避坑指南)

本文提供了一份详细的保姆级教程,指导如何在Windows 10/11上为QT5.14.2配置MSVC2017编译器,包括VS2022组件避坑指南。从环境准备到关键配置,再到调试工具验证和Qt Creator中的编译器设置,一步步解决常见问题,帮助开发者快速搭建稳定可靠的开发环境。

weixin_30615767的博客 503

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

1、定义区别:箭头函数语法比普通函数更加简洁普通函数使用关键字function定义。箭头函数:如果没有参数,直接写一个();如果一个参数,可以省略();如果多个参数,逗号分割。如果函数体中只有return返回语句或者只有一句代码,return和{}可以省略。2this指向区别箭头函数没有自己的this,箭头函数内部 this 始终指向创建时所在作用域指向的对象。call,apply,bind方法改变不了箭头函数的指向。普通函数:直接调用时指向全局对象;

maidu_xbd的博客 1084

STM32G474实战:数字LLC电源控制程序从零到跑通(附完整代码解析)

本文详细介绍了基于STM32G474微控制器开发数字LLC电源控制程序的完整实战流程。从硬件平台搭建、CubeMX工程配置,到核心控制逻辑、双速率中断框架、数字PID实现,再到Burst模式、状态机等高级策略与异常处理,提供了从零到跑通的系统化指南与代码解析,助力开发者掌握高效数字电源的程序编写与调试技巧。

s1t2u3的博客 1239

箭头函数与普通函数的区别是什么?

箭头函数提供了语法简洁性和词法作用域绑定的优点,适合用于简单的函数逻辑、回调函数以及需要保持词法作用域的场景。而普通函数则具有更多的功能和灵活性,适用于复杂的函数逻辑、需要动态上下文绑定、使用arguments对象以及需要递归调用的场景。

破损的天堂鸟博客 1699

第55篇:数据隐私保护技术盘点——差分隐私、同态加密与它们的坑(踩坑总结)

数据隐私保护是AI工程化中必须严肃对待的课题。差分隐私和同态加密是两把利器,但也都是“重武器”,使用不当反而会伤及自身。差分隐私像“模糊处理”,通过加噪来保证统计安全性,要小心管理隐私预算和效用权衡。同态加密像“保险箱里打算盘”,保证了计算的精确性,但必须承受巨大的性能和工程复杂度代价。我的建议是:从小规模实验开始,先用DP-SGD在MNIST/CIFAR-10等标准数据集上感受噪声与精度的关系;再用TenSEAL等易用的库尝试一个加密逻辑回归,体会密文膨胀和速度延迟。

ai_blue_pm的博客 281

ABAP CDS View 从入门到精通教程目录:ABAP CDS View 在 SAP 技术体系中的重要地位

学习 ABAP CDS View 的开发技术,体会其背后的设计理念,也就掌握了 SAP S/4HANA 底层数据模型的设计精髓。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4783

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

js箭头函数和普通函数区别 实验环境:nodejs v12.16.1 箭头函数不能作为构造函数,而普通函数可以 箭头函数没有原型,而普通函数有。 箭头函数return可以省略语句块。 箭头函数不绑定arguments(注意:浏览器环境下获取箭头函数的arguments会报错),而普通函数argument绑定了参数列表对象 this指向问题 箭头函数的this指向上层函数作用域的thi...

qq_18138105的博客 2003

Oracle数据库表空间使用情况查询

在Oracle数据库中,表空间(Tablespace)是用于存储表、索引和其他数据库对象的逻辑存储单元。了解表空间的使用情况对于数据库管理员和开发人员来说是非常重要的,因为它可以帮助他们监控数据库的空间使用情况并进行容量规划。本文将介绍如何查询Oracle数据库中的表空间使用情况。通过执行以上SQL查询语句,你可以获得Oracle数据库中表空间的使用情况、文件大小和表空间大小等信息。这些信息可以帮助你了解数据库的存储情况,并进行适当的优化和容量规划。查看表空间的数据文件和表空间大小。查看表空间的使用情况。

CsmbPascal的博客 860

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

1.this(执行上下文)指向 (1)普通函数中的this: 在简单调用中,非严格模式下,指向window。严格模式下,为undefined。 function parent() { console.log(this); } parent();// window 'use strict'; function parent() { console.log(this); } parent(1,2); // undefined 作为某个对象方法调用时,this指向

少油少盐不要辣 3682

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

特性普通函数箭头函数语法this根据调用方式动态绑定继承自外层作用域构造函数可以不可以arguments存在不存在,使用剩余参数代替super根据调用方式动态绑定继承自外层作用域prototype存在不存在new.target存在不存在了解这些区别有助于你在编写 JavaScript 代码时做出合适的选择,利用每种函数类型的优点。

Yue 663

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

前端面试系列-JavaScript-箭头函数(与普通函数的区别)

文章目录一、箭头函数二、与普通函数的区别1.箭头函数不会创建自己的this2.箭头函数继承而来的this指向永远不变(重要)3.call()、apply()、bind()无法改变箭头函数中this的指向4.箭头函数不绑定arguments,取而代之用rest参数…解决5.不能使用new操作符(作为构造函数使用)6.不能使用原型属性7.不能简单返回对象字面量8.箭头函数不能换行 一、箭头函数 // 箭头函数 let fun = (name) => { // 函数体 return `Hel

LYFlied的博客 5382

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

一、普通函数和箭头函数的区别 1、箭头函数是匿名函数,不能作为构造函数使用,能使用new创建自己的实例 // 箭头函数 let arrowFun = () => console.log('kelly') let arrow_fun = new arrowFun() // 报错: Fun is not a constructor // 普通函数 function normalFun() { console.log('kk')

weixin_42943920的博客 695

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

箭头函数和普通函数的区别 一.外形不同:箭头函数使用箭头定义,普通函数中没有 代码实例如下: // 普通函数 function func(){ // code } // 箭头函数 let func=()=>{ // code } 二.箭头函数都是匿名函数 普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。 代码实例如下: // 具名函数 function func(){ // code } // 匿名函数 let func=function(){ // co...

zhengzhengwang的专栏 580

JS箭头函数和普通函数有什么区别?

JavaScript中的箭头函数(Arrow Functions)和普通函数(Function Expressions 和 Function Declarations)在语法和特性上有一些关键的区别。对象,且不需要作为构造函数使用的情况下,箭头函数是一个很好的选择。总之,箭头函数提供了一种更简洁的函数定义方式,并且有着不同的。

m0_47408435的博客 548

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

js的箭头函数和普通函数

牛先森家的博客 346

【JavaScript】箭头函数和普通函数的区别

​:语法更简洁,适合回调函数和简单逻辑。嵌套场景下,箭头函数继承最近普通函数的。可能指向全局对象(非严格模式)或。​,继承定义时的外层作用域,​。的场合(如闭包嵌套)。

小秀的博客 516

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

在 JavaScript 里,箭头函数是 ES6 引入的新特性,它和普通函数存在诸多区别,以下从语法、this。

m0_73483647的博客 458

【JavaScript面试】箭头函数和普通函数的区别

举个栗子。

qq_40992225的博客 206

前端JS箭头函数和普通函数的区别全解 面试必问

在对象的方法中分别使用匿名函数function和箭头函数,对象调用该方法时,匿名函数的this指向被其调用的对象obj1,箭头函数的this指向父层的this,由于该代码是写在 Vue 项目中,因此this指向组件实例,在组件实例中,并没有变量a,因此this.a是undefined。另外,如果函数体很复杂,有许多行,或者函数内部有大量的读写操作,不单纯是为了计算值,这时也不应该使用箭头函数,而是要使用普通函数,这样可以提高代码可读性。方法中,使用了箭头函数,这导致这个箭头函数里面的。

2301_78320134的博客 1091

JS 普通函数、匿名函数、箭头函数 的特点和区别

1. 普通函数 【具名函数】 普通函数存在 函数声明的提升 普通函数的定义: 关键字(function) 函数名 (参数){ //参数是形参(形式参数) 函数体 return xxx } 普通函数的调用: 函数名(参数) //参数是实参(实际参数) 形参和实参: 形参(形式参数):就是我在这个地方占个位,表示这个地方有一个参数, 我给他一个形式的名字用来表示我要占的这个坑的名字,在封装的函数里面会用到 这个形式参数来代表之后函数真正传进来的值进行运算。 实参:再调用函数的时

君兮的博客 4374

JavaScript篇:普通函数与箭头函数的本质区别与使用场景

作为前端开发者,我们每天都在和各种函数打交道。ES6引入的箭头函数让JavaScript的函数世界更加丰富多彩,但你真的了解它们之间的区别吗?今天,我就来为大家详细剖析普通函数与箭头函数的那些事儿。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 1245
上一篇: 前端CSS Flex布局8大重难点知识,收藏起来吧
下一篇: 分享20个Javascript中的数组方法,收藏
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾编程前端技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值