es6箭头函数详解_es6的新特性

es6箭头函数详解_es6的新特性ES6标准新增了一种新的函数:ArrowFunction(箭头函数)。基础语法通常函数的定义方法varfn1=function(a,b){returna+b}functionfn2(a,b){returna+b}使用ES6箭头函数语法定义函数,将原函数的“function”关键字和函数名都删掉,并使用“=>”连接参数…

大家好,又见面了,我是你们的朋友全栈君。

ES6标准新增了一种新的函数:Arrow Function(箭头函数)。

基础语法

通常函数的定义方法

var fn1 = function(a, b) {
    return a + b
}

function fn2(a, b) {
    return a + b
}

使用ES6箭头函数语法定义函数,将原函数的“function”关键字和函数名都删掉,并使用“=>”连接参数列表和函数体。

var fn1 = (a, b) => {
    return a + b
}

(a, b) => {
    return a + b
}

当函数参数只有一个,括号可以省略;但是没有参数时,括号不可以省略。

// 无参
var fn1 = function() {}
var fn1 = () => {}

// 单个参数
var fn2 = function(a) {}
var fn2 = a => {}

// 多个参数
var fn3 = function(a, b) {}
var fn3 = (a, b) => {}

// 可变参数
var fn4 = function(a, b, ...args) {}
var fn4 = (a, b, ...args) => {}

箭头函数相当于匿名函数,并且简化了函数定义。箭头函数有两种格式,一种只包含一个表达式,省略掉了{ … }和return。还有一种可以包含多条语句,这时候就不能省略{ … }和return

() => return 'hello'
(a, b) => a + b
(a) => {
  a = a + 1
  return a
}

如果返回一个对象,需要特别注意,如果是单表达式要返回自定义对象,不写括号会报错,因为和函数体的{ … }有语法冲突。

注意,用小括号包含大括号则是对象的定义,而非函数主体

x => {key: x} // 报错
x => ({key: x}) // 正确

箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。(词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变 。)

非箭头函数

es6箭头函数详解_es6的新特性

现在,箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者Person

es6箭头函数详解_es6的新特性

由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略

JavaScript中的每一个Function对象都有一个apply()方法和一个call()方法

apply调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象调用B对象的方法。func.apply(thisArg, [argsArray])
call调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。func.call(thisArg, arg1, arg2, …)

详见《JavaScript中apply()和call()的区别和应用》

es6箭头函数详解_es6的新特性

非箭头函数,调用call()时打印的数据

es6箭头函数详解_es6的新特性

使用箭头函数之后,不再需要以前hack的写法,var that = this。但不能盲目的使用ES6箭头函数,请看下一节《正确使用箭头函数——什么时候不该用ES6箭头函数》

总结

  1. 类似于匿名函数,在某些情况下使用,可减少代码量
  2. 代码简洁,this提前定义
  3. 代码太过简洁,导致不好阅读
  4. this提前定义,导致无法使用js进行一些在ES5里面看起来非常正常的操作(若使用箭头函数,在监听点击事件的回调函数中,就无法获取到当前点击的元素咯,详见《正确使用箭头函数——什么时候不该用ES6箭头函数》
  5. 总的来说,箭头函数只是一种函数的简写,有其利弊,可用可不用,看大家心情,当然也得用的正确

与君共勉:再牛逼的梦想,也抵不住傻逼般的坚持!  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125020.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • http与https的区别与联系_http状态码

    http与https的区别与联系_http状态码HTTP与HTTPS握手的那些事

  • springboot整合shiro实现权限控制

    springboot整合shiro实现权限控制ApacheShiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。上个月写了一个在线教育的项目用到了shiro权限控制,这几天又复盘了一下,对其进行了深入探究,来总结一下。下面所总结的有关shiro的代码已经传到我的github上,可以访问下面的……

    2022年10月22日
  • idea激活码最新_在线激活[通俗易懂]

    (idea激活码最新)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • Window Server IIS6.0部署webservice请求调用提示请求失败「建议收藏」

    Window Server IIS6.0部署webservice请求调用提示请求失败

  • 排列组合公式的原理_有序排列组合公式

    排列组合公式的原理_有序排列组合公式绪论:加法原理、乘法原理#分类计数原理:做一件事,有n类办法,在第1类办法中有m1种不同的方法,在第2类办法中有m2种不同的方法,…,在第n类办法中有mn种不同的方法,那么完成这件事共有N=m1+m2+…+mn种不同的方法。分步计数原理:完成一件事,需要分成n个步骤,做第1步有m1种不同的方法,做第2步有m2种不同的方法,…,做第n步有mn种不同的方法,那么完成这件事共有N=m1×m2×⋯×mn种不同的方法。区别:分类计数原理是加法原理,不同的类加起来就是我要得到的总数;分步计数原理是乘法原理,是同一

    2022年10月21日
  • 详解 JVM Garbage First(G1) 垃圾收集器

    详解 JVM Garbage First(G1) 垃圾收集器版权声明:本文为博主原创文章,转载请联系作者并注明出处。详解JVMGarbageFirst(G1)垃圾收集器前言GarbageFirst(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java8/9,那么有很大可能希望对G1收集器进行评估。本文详细首先对JVM其他的垃圾收集器进行总结,并与G1进

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号