位置: IT常识 - 正文

ES6中的箭头函数详细梳理(es6箭头函数写法)

编辑:rootadmin
ES6中的箭头函数详细梳理 一、箭头函数的介绍1.1 什么是箭头函数

推荐整理分享ES6中的箭头函数详细梳理(es6箭头函数写法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:es6的箭头函数解决了什么问题,es6 箭头函数 阮一峰,es6箭头函数的理解,es6箭头函数详解,es6箭头函数写法,es6箭头函数写法,es6的箭头函数解决了什么问题,es6的箭头函数解决了什么问题,内容如对您有帮助,希望把文章链接给更多的朋友!

ES6中允许使用=>来定义函数。箭头函数相当于匿名函数,并简化了函数定义。

1.2 基本语法// 箭头函数let fn = (name) => { // 函数体 return `Hello ${name} !`;};// 等同于let fn = function (name) { // 函数体 return `Hello ${name} !`;};

箭头函数在语法上比普通函数简洁多。箭头函数就是采用箭头=>来定义函数,省去关键字function。

函数的参数放在=>前面的括号中,函数体跟在=>后的花括号中

1.3 箭头函数的参数

①如果箭头函数没有参数,写空括号

//没有参数,写空括号 let fn = () => { console.log('hello'); };

②如果箭头函数有一个参数,也可以省去包裹参数的括号

//只有一个参数,可以省去参数括号 let fn = name => { console.log(`hello ${name}!`) };

③如果箭头函数有多个参数,将参数依次用逗号(,)分隔,包裹在括号中。

let fn = (val1, val2, val3, val4) => { return [val1, val2, val3, val4]; }1.4 箭头函数的函数体

①如果箭头函数的函数体只有一句执行代码,简单返回某个变量或者返回一个简单的js表达式,可以省去函数体花括号{ }

//返回某个简单变量vallet f = val => val;// 等同于let f = function (val) { return val };//返回一个简单的js表达式num1+num2let sum = (num1, num2) => num1 + num2;// 等同于let sum = function(num1, num2) { return num1 + num2;};

②如果箭头函数的函数体只有一句代码,返回的不是变量和简单的js表达式,而是一个对象。

//错误写法—花括号会被解释为函数体 let getItem = id => { id: id, name: 'gaby' };//正确写法 let getItem = id => ({ id: id, name: 'gaby' });

③如果箭头函数的函数体只有一条语句且不需要返回值(最常用于回调函数),加上void关键字

let fn = () => void doesNotReturn();

箭头函数用于回调函数,常见简洁

//栗子1//普通函数 [1, 2, 3].map(function (x) { return x + x; });//ES6箭头函数[1, 2, 3].map(x => x + x);//栗子2//普通函数 var result = [2, 4, 5, 1, 6].sort(function (a, b) { return a - b; });//ES6箭头函数var result = [2, 4, 5, 1, 6].sort((a, b) => a - b);二、箭头函数的this指向规则2.1 箭头函数没有原型prototype,因此箭头函数没有this指向 let fn = () => { console.log('Hello World !') }; console.log(fn.prototype); // undefined

2.2 箭头函数不会创建自己的this,如果存在外层第一个普通函数,在定义的时候会继承它的this

箭头函数没有自己的this指向,它会捕获自己定义所处的外层执行环境,并且继承这个this值。箭头函数的this指向在被定义的时候就确定了,之后永远都不会改变。(!永远)

(1)栗子1 var id = 'Global'; //普通函数 function fn1() { setTimeout(function () { console.log(this.id) }, 1000); } //箭头函数 function fn2() { setTimeout(() => { console.log(this.id) }, 1000); } fn1.call({ id: 'obj' });//Global fn2.call({ id: 'obj' });//obj

解析:普通函数的setTimeout 一秒后执行是在全局作用域,所有this指向window对象,this.id指向了全局变量id,输出Golbal。箭头函数的this在定义的时候就确定了,继承fn2的执行环境中的this,fn2的this指向被call方法改变绑定到obj这个对象

(2)栗子2 var id = 'Global'; var obj = { id: 'OBJ', a: function () { console.log(this.id) },//方法a普通函数定义 b: () => { console.log(this.id) }//方法b用箭头函数定义 }; obj.a();//OBJ obj.b();//Global

解析:普通函数作为对象的方法调用,this指向所属的对象(谁调用它就指向谁),this.id 就是obj.id;箭头函数继承定义它的执行环境的this,指向window对象,指向全局变量,输出Global。花括号{}无法形成一个单独的执行环境,所有它依然在全局中。

2.3 箭头函数的this是继承而来的永远不会变,call/apply/bind也无法改变ES6中的箭头函数详细梳理(es6箭头函数写法)

.call()/.apply()/.bind()方法可以用来动态修改函数执行时this的指向,但由于箭头函数的this定义时就已经确定且永远不会改变

var name = 'gaby' var person = { name: 'gabrielle', say: function () { console.log('say hello', this.name) }, //普通函数 say2: () => { console.log('say2 hello', this.name) } //箭头函数 } person.say.call({ name: 'Mike' }) person.say2.call({ name: 'Amy' })

解析:say的普通函数通过call调用已经改变this指向。say2箭头函数调用call绑定尝试改变this指向,但是仍然打印出外一层普通函数的this指向,window对象的全局变量name。

2.4 箭头函数this指向只能间接修改

间接修改:修改被继承的普通函数的this指向,箭头函数的this指向也会跟着改变。

箭头函数的this指向定义时所在的外层第一个普通函数,跟使用的位置没有关系。

let al let aObj = { msg: 'a的this指向' }; bObj = { msg: 'b的this指向' }; a.call(aObj); //将a的this指向aObj b.call(bObj); //将b普通函数的this指向bObj 箭头函数内部的this指向也会指向bObj function b() { al(); } function a() { al = () => { console.log(this, 'this指向定义时外层第一个普通函数 ') }; }

2.5 箭头函数外层没有函数,严格模式和非严格模式下它的this都会指向window全局对象

箭头函数的this指向继承自外层第一个普通函数的this,那么如果没有外层函数,它的this指向哪里?

this的绑定规则:非严格模式下,默认绑定的this指向全局对象,严格模式下this指向undefined。

如果箭头函数外层没有普通函数继承,箭头函数在全局作用域下,严格模式和非严格模式下它的this都会指向window(全局对象)

2.6 多层嵌套函数this指向

箭头函数中的this引用的是最近作用域中的this,是向外层作用域中,一层层查找this,直到有this的定义。

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

构造函数做了什么?

①JS内部首先会先生成一个对象

②再把函数中的this指向该对象

③然后执行构造函数中的语句

④最终返回该对象实例

箭头函数没有自己的this,this继承外层执行环境中的this,且this永远不会改变。new会报错

let fn = (name, age) => { this.name = name; this.age = age; }; let person = new fn('gaby', 20)

2.8 箭头函数不支持new.target

ES6新引入的属性,普通函数可以通过new调用,new.target返回该函数的引用。用于确定构造函数是否为new调用。箭头函数并不能作为构造函数使用new,自然也不支持new.targer。

(1)箭头函数的this指向全局对象,在箭头函数中使用箭头函数会报错 let fn = () => { console.log(new.target) }; fn()

(2)箭头函数的this指向普通函数,它的new.target就是指向该普通函数的引用 new fn2(); function fn2() { let fn = () => { console.log(new.target) }; fn(); }

三、箭头函数的arguments规则3.1 箭头函数没有自己的arguments(1)箭头函数处于全局作用域中

箭头函数的this指向全局对象,会报arguments未

本文链接地址:https://www.jiuchutong.com/zhishi/300580.html 转载请保留说明!

上一篇:【年终总结】我的前端之行,回顾2022,展望2023(我的年终总结怎么写)

下一篇:【TypeScript】TS条件类型(十)(typescript some)

  • 天府健康码变黄怎么变绿(天府健康码变黄后多久能变绿)

    天府健康码变黄怎么变绿(天府健康码变黄后多久能变绿)

  • voc智能锁怎么设置指纹(voc智能锁怎么设置临时密码)

    voc智能锁怎么设置指纹(voc智能锁怎么设置临时密码)

  • 华为荣耀v20处理器是多少(华为荣耀v20处理器980什么意思)

    华为荣耀v20处理器是多少(华为荣耀v20处理器980什么意思)

  • 苹果xr怎么录制视频(苹果xr怎么录屏)

    苹果xr怎么录制视频(苹果xr怎么录屏)

  • 怎么注销qq支付(微信转账错了怎么收回来)

    怎么注销qq支付(微信转账错了怎么收回来)

  • pk天数对方有提醒吗(pk连续登录天数对方知道吗)

    pk天数对方有提醒吗(pk连续登录天数对方知道吗)

  • 小米锁屏壁纸自动变怎么弄(小米锁屏壁纸自己换了)

    小米锁屏壁纸自动变怎么弄(小米锁屏壁纸自己换了)

  • 苹果6手机触屏点不动怎么办(苹果6手机触屏不灵敏怎么调整)

    苹果6手机触屏点不动怎么办(苹果6手机触屏不灵敏怎么调整)

  • 普通sim卡能转esim卡吗

    普通sim卡能转esim卡吗

  • ip地址一模一样说明什么(ip地址一样怎么办)

    ip地址一模一样说明什么(ip地址一样怎么办)

  • 电脑文件发不出去怎么回事(电脑文件发不出去怎么回事微信)

    电脑文件发不出去怎么回事(电脑文件发不出去怎么回事微信)

  • 佳能mp236警告灯闪烁(佳能mp236警告灯闪烁3次)

    佳能mp236警告灯闪烁(佳能mp236警告灯闪烁3次)

  • 为什么哔咔加载很慢(哔咔哔咔加载不了)

    为什么哔咔加载很慢(哔咔哔咔加载不了)

  • 镜头主要分为哪几类(镜头的分类包括四个)

    镜头主要分为哪几类(镜头的分类包括四个)

  • word怎么生成目录(word怎么生成目录wps)

    word怎么生成目录(word怎么生成目录wps)

  • 天猫精灵能当录音笔吗(天猫精灵可以当收音机吗)

    天猫精灵能当录音笔吗(天猫精灵可以当收音机吗)

  • 华为nova5pro要贴膜吗(nova5需要贴膜吗)

    华为nova5pro要贴膜吗(nova5需要贴膜吗)

  • 为什么苹果手机发短信特效对方看不见(为什么苹果手机信号不好 怎么解决)

    为什么苹果手机发短信特效对方看不见(为什么苹果手机信号不好 怎么解决)

  • 陌陌版本beta已过期什么意思(陌陌该版本已停止服务请升级)

    陌陌版本beta已过期什么意思(陌陌该版本已停止服务请升级)

  • 条件格式化功能在哪(条件格式化功能在哪excel)

    条件格式化功能在哪(条件格式化功能在哪excel)

  • qq云端在哪里(qq云端在哪里找到)

    qq云端在哪里(qq云端在哪里找到)

  • 电脑播放视频没有声音(电脑播放视频没有声音了怎么恢复)

    电脑播放视频没有声音(电脑播放视频没有声音了怎么恢复)

  • 怎么连接局域网电脑(魔兽争霸怎么连接局域网)

    怎么连接局域网电脑(魔兽争霸怎么连接局域网)

  • 富士山与丛生福禄考花田,日本山梨县 (© Srinil/shutterstock)(富山和富士山)

    富士山与丛生福禄考花田,日本山梨县 (© Srinil/shutterstock)(富山和富士山)

  • 【axios】axios的基本使用(axios用法示例)

    【axios】axios的基本使用(axios用法示例)

  • 织梦dedecms文章简介摘要字数的设置方法(织梦网站怎么添加关键词)

    织梦dedecms文章简介摘要字数的设置方法(织梦网站怎么添加关键词)

  • 增值税税控开票软件怎么下载
  • 所得税汇算补提所得税会计分录
  • 财务软件增值税
  • 什一税是什么意思?
  • 如何确定交易性金融资产
  • 合作社收到政府补助款怎么做分录呢
  • 小规模纳税人批发机动车
  • 留存收益的个别资本成本率计算公式
  • 三免三减半如何申报企业所得税
  • 购入生产线属于什么费用
  • 分公司可以独立开银行账户吗
  • 税收滞纳金计入营业外支出的哪一项
  • 增值税零税率与免税有何不同
  • 月末结存材料的实际成本怎么计算
  • 小规模纳税人怎么查询
  • 福利费进项税可以抵扣
  • 在筹建期间的费用属于什么
  • 月初发票认证能抵扣吗
  • 企业购入物资合同模板
  • 在年度汇算清缴前取得去年成本发票
  • 房产税计税依据房产原值怎么算
  • 通用机打发票上没有税率
  • 个人缴纳的住房公积金可以提现吗
  • 外贸企业支付境外佣金
  • 当月认证失控发票怎么做账处理?
  • 存货年末余额怎么算出来的
  • 汇丰银行账户管理费
  • 结转完工产品成本的公式
  • 上年度的费用今年怎么算
  • 资产购置融资
  • gcuservice.exe
  • php 首字母大写
  • 贷款和应收款项应采用实际利率法,按摊余成本计量
  • 财务部门产生的费用入什么?
  • PHP:mcrypt_module_get_algo_block_size()的用法_Mcrypt函数
  • 吃辣第二天长痘痘
  • 淘宝买建材
  • cuda安装步骤
  • SpringBoot+Vue实现简单用户管理平台第一篇(后端接口设计)
  • 模型论文是什么类型
  • 会计账的银行存款与银行存款不一致 是属于账账不符吗
  • 探望生病职工的话语
  • 微擎框架破解版v2.7.7
  • 以旧换新方式销售金银首饰的消费税处理
  • 非营利组织会计就是用于确认、计量
  • 给员工发放礼品的祝福
  • 投资性房地产如何折旧
  • 金蝶做账流程视频
  • sqlserver2008数据库还原
  • 成立业主委员会申请书
  • 简述税收筹划的意义
  • 企业非流动资产包括
  • 给员工打了备用金后归还怎么做账
  • 差旅费科目设置
  • 先收款后给发票合法吗
  • 现金流量表中应收账款为负是什么意思
  • 小规模纳税人进口货物增值税税率
  • 其他债权投资有哪些科目
  • 固定资产净残值最后怎么处理
  • 银行对账单怎么打印
  • 私营公司待摊费怎么算
  • sql如何对两个表数据求和
  • mysql 300万条数据
  • win7如何给电脑硬盘加密
  • window10与CentOS双系统安装详细教程
  • 重庆四日游最佳攻略超详细
  • win8热点设置
  • 苹果15手机价格和图片颜色
  • windows10如何取消密码开机
  • windows7怎么禁用网络
  • windows运行nodejs
  • 播放一个灵异电影
  • JavaScript中的this指向
  • jquery设置div的宽度和高度
  • 合肥房子契税退税
  • 北京车位过户手续费多少
  • 怎么看扣税明细
  • 重庆国税税务局官网
  • 五证合一后还需要去税务局吗
  • 河北省餐饮经营单位安全生产规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设