【面试题】ES6语法五之箭头函数

ES6特性=>。
function foo(x, y){
    return x + y
}
var foo = (x, y) => x + y
包括一个参数列表(零个或多个参数,如果参数不是一个需要小括号包起来),然后是标识=>,函数体放在最后。
箭头函数是这一部分(x, y) => x + y, 然后这个函数引用被赋给变量foo。
函数体如果只有一个表达式可以省略{..},并且前面有一个隐含的return。
箭头函数总是函数表达式,并不存在箭头函数声明,它还是匿名的函数表达式。它们没有用于递归或者事件绑定/解绑定的命名引用。
箭头函数支持普通函数参数所有功能:默认值,解构,rest参数等。如果这个函数越长, => 带来的好处越小,反之越大。
this指向 在普通函数中,this指向是动态的,而在箭头函数中,是可以预测的。this在箭头函数中,和词法作用域有关。
var ctrl = {
    makeRequest: function(){
        var self = this;
        btn.addEventListener('click', function (){
            self.makeRequest()
        }, false)
    }
}
上述代码修改成箭头函数的话,是这样的:
var ctrl = {
    makeRequest: function(){
        btn.addEventListener('click',  ()=>{
            this.makeRequest()
        }, false)
    }
}
这样,省略了var self = this关键字function。
但如果全部改为箭头函数的话,this就会乱套。此时指向全局对象。
// 不推荐, 改变了函数原有的本意
var ctrl = {
    makeRequest: ()=>{
        btn.addEventListener('click',  ()=>{
            this.makeRequest()
        }, false)
    }
}
如果要还原函数原来的意思,我们需要把var self = this这样的hack,或者通过var arg=Array.prototype.slice.call(..)词法复制。这样就达到了安全的全部替换成箭头函数的目的了。
结语:虽然箭头函数给我带来了便利,但是我们在使用的过程中还是要注意一些隐秘的坑。this的指向问题,是否需要递归?是否需要硬绑定或者是解绑... 判断函数体的长度是否适用箭头函数,可读性如何?
总结给大家推荐一个实用面试题库
1、前端面试题库 (面试必备) 推荐:★★★★★
地址:前端面试题库
2、前端技术导航大全 推荐:★★★★★
地址:前端技术导航大全
3、开发者颜色值转换工具 推荐:★★★★★
地址 :开发者颜色值转换工具
【面试题】ES6语法五之箭头函数的更多相关文章
- ES6入门五:箭头函数、函数与ES6新语法
		箭头函数的基本用法与特点 函数与ES6新语法 一.箭头函数的基本用法与特点 声明箭头函数采用声明变量和常量的关键字:var.let.const 箭头函数的参数:没有参数用"()"空 ... 
- JavaScript ES6 Arrow Functions(箭头函数)
		1. 介绍 第一眼看到ES6新增加的 arrow function 时,感觉非常像 lambda 表达式. 那么arrow function是干什么的呢?可以看作为匿名函数的简写方式. 如: var ... 
- 石川es6课程---4、箭头函数
		石川es6课程---4.箭头函数 一.总结 一句话总结: 相当于函数的简写,类似python lambda 函数,先了解即可 let show1 = function () { console.log ... 
- js 从两道面试题加深理解闭包与箭头函数中的this
		壹 ❀ 引 在本文之前我已经花了两个篇幅专门介绍了JavaScript中的闭包与this,正好今早地铁上看到了两道面试题,试着做了下发现挺有意思,所以想单独写一篇文章来记录解析过程.若你对于闭包与t ... 
- es6新特性之箭头函数
		<script> { // es3,es5 var evens = [1, 2, 3, 4, 5]; var odds = evens.map(function (v) { return ... 
- ES6系列_7之箭头函数和扩展
		1.默认值 在ES6中给我们增加了默认值的操作相关代码如下: function add(a,b=1){ return a+b; } console.log(add(1)); 可以看到现在只需要传递一个 ... 
- ES6新特性之箭头函数与function的区别
		写法不同 // function的写法 function fn(a, b){ return a+b; } // 箭头函数的写法 let foo = (a, b) =>{ return a + b ... 
- ES6必知,箭头函数与普通函数的区别。
		1. 箭头函数没有prototype(原型),所以箭头函数本身没有this let a = () =>{}; console.log(a.prototype); // undefined 2. ... 
- es6中的双箭头函数
		原代码: const fetchPosts = subreddit => dispatch => { dispatch(requestPosts(subreddit)); return c ... 
- 深入理解ES6箭头函数的this以及各类this面试题总结
		ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性,俘获了大批粉丝儿 它也可能是面试中的宠儿, 我们关键要搞清楚 箭头函数和普通函数中的this 一针见血式总结: 普通函数中的 ... 
随机推荐
- YMOI 2019.6.8
			题解 YMOI 2019.6.8 前言 第二回考试,承让拿了第一次rank1,(●ˇ∀ˇ●) 题解 这次考试总体发挥比较好,每一道题都尽可能得取得了所能及的所有分.虽然多少还是有失误,不过在所难免.保 ... 
- vue-echarts数据可视化实现自适应屏幕进行缩放,这个我写了两篇文章,一个用了vue-echarts,一个直接用的charts ,我可真机智 啊~~~
			使用这个后可以实现屏幕自适应 效果如下 <template> <div style="width:100%;height:20rem" ref="res ... 
- SQLSERVER 事务日志的 LSN 到底是什么?
			一:背景 1. 讲故事 大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能理解一半了,关于 ... 
- NodeJS 实战系列:如何设计 try catch
			本文将通过一个 NodeJS 程序里无效的错误捕获示例,来讲解错误捕获里常见的陷阱.错误捕获不是凭感觉添加 try catch 语句,它的首要目的是提供有效的错误排查信息,只有精心设计的错误捕获才有可 ... 
- 带你熟悉3种AQS的线程并发工具的用法
			摘要:AQS 的全称为(AbstractQueuedSynchronizer),AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器. 本文分享自华为云社区 ... 
- 【随笔记】ATECC608 加密芯片调试记录
			芯片通信测试 根据芯片手册,ATECC608B 的 7bit 器件地址是:0x35 root@linux:/usr/bin# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a ... 
- 【Android 4.4】内存文件系统(tmpfs)的创建与使用
			前言说明 某些情况下,需要缓存一些文件到磁盘中,我们可以借助 tmpfs 文件系统,来提升读写缓存文件的速度,并且也可以避免频繁读写缓存文件所带来的对 flash 的寿命影响. 使用方法 通过 mkd ... 
- AI 制作 3D 素材|基于 AI 5 天创建一个农场游戏,第 3 天
			欢迎使用 AI 进行游戏开发! 在本系列中,我们将使用 AI 工具在 5 天内创建一个功能完备的农场游戏.到本系列结束时,您将了解到如何将多种 AI 工具整合到游戏开发流程中.本文将向您展示如何将 A ... 
- springboot集成ElasticApm
			jvm参数方式: -javaagent:D:/codesoft/elastic-apm-agent-1.18.0.jar -Delastic.apm.service_name=my-applicati ... 
- zookeeper03-集群搭建
			1.前言 在前面的文章中讲了单机版zookeeper的搭建,现在在单机版的基础上搭建集群.默认单机版的搭建好了.我这里只有一台服务器,所以在单机上搭建的为集群 2.将单机安装好的zookeeper复制 ... 
