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

简介: 【面试题】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、开发者颜色值转换工具   推荐:★★★★★

地址 :开发者颜色值转换工具

相关文章
|
7月前
|
前端开发
【面试题】如何使用ES6 ... 让代码优雅一点?
【面试题】如何使用ES6 ... 让代码优雅一点?
|
7月前
|
JavaScript 前端开发
【面试题】 JS手写ES6的Object.create方法
【面试题】 JS手写ES6的Object.create方法
|
7月前
|
设计模式 前端开发 算法
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
【面试题】 ES6 类聊 JavaScript 设计模式之行为型模式(二)
|
3月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
2月前
|
JavaScript
震惊了,面试官居然问我ES6中class语法糖是怎么实现的
【10月更文挑战第2天】震惊了,面试官居然问我ES6中class语法糖是怎么实现的
震惊了,面试官居然问我ES6中class语法糖是怎么实现的
|
2月前
|
存储 前端开发 JavaScript
关于 ES6 中 Promise 的面试题
关于 ES6 中 Promise 的面试题
19 0
|
4月前
|
安全 Java 编译器
Java 基础语法-面试题(53道)(基础概念+基础语法+流程控制)
Java 基础语法-面试题(53道)(基础概念+基础语法+流程控制)
70 18
|
4月前
|
Java
Java 基础语法-面试题(54-63道)(数组+类+包)
Java 基础语法-面试题(54-63道)(数组+类+包)
46 16
|
5月前
|
JSON 前端开发 数据格式
|
7月前
|
索引
【ES6新语法】let、const、var的区别,你学会了面试官没话说
【ES6新语法】let、const、var的区别,你学会了面试官没话说