参考:《ES6标准入门教程》 作者:阮一峰
在ES6中允许了一种新函数方式“箭头函数”,它大概的如下:
var a = (x) => x;
等同
var a = function(x){
return x;
}
如果不需要参数,使用一个空括号代表就可以了
var a = () => 1;
等同
var a = function() {
return 1;
}
如果箭头函数需要在返回之前进行一些逻辑操作,那么需要添加大括号{}
,并显示的声明return
语句,如果没有return
语句那么返回的是一个undefined
:
var a = (x) => {
x += x;
return x;
}
等同
var a = function(x) {
x += x;
return x;
}
由于在Javascript中把大括号{}
认为是一个代码块,所以如果我们需要返回的是一个对象,那么我们需要用()
包围{}
:
var a = () => ({a: 1, b:2});
a(); // {a: 1, b:2}
在回调函数的时候使用箭头函数可以很大的增加我们代码的阅读能力以及代码的简洁:
[1, 2, 3].map(function(x) {
return x + 1;
});
使用箭头函数
[1, 2, 3].map((x) => x + 1);
但是在使用箭头函数之前你可能需要注意以下几点:
- 箭头函数内部的this指针是指向定义时所在的对象,而不是使用时的所在的对象。和普通的函数不一样,箭头函数内部的this指针是固定的。
- 箭头函数不可当作构造函数来使用,也就是说不能使用new命令,因为箭头函数内部没有this对象,所以在定义的时候箭头函数的this对象其实指的在定义时作用域内的this对象。
- 箭头函数内部没有argunments对象,如果需要可以使用(...ary)这样的方式来获取多个参数。
上面第一点一定注意,这可能会影响你代码的未知错误。如果是普通的函数,当经过100毫秒后,普通函数this指针指向所运行时的作用域,也就是全局对象。可以通过下面的代码来说明:
function conlog(){
setTimeout(() => {
console.log('箭头函数:', this.id)
}, 100);
setTimeout(function(){
console.log('普通函数:', this.id);
}, 100);
}
var id = 10;
conlog.call({id: 9}); // 箭头函数: 9
// 普通函数:10
文完
本文首发于:ES6箭头函数-伍仪洲的博客
《ES6箭头函数》留言数:0