箭头函数至关于匿名函数,它的写法是:函数
x => x*x
它至关于this
fucntion (x){ return x*x; }
能够看到,只有一条语句的箭头函数省略了括号与return
。若是含有多条表达式,那么就不能省略{}
与return
:rest
x => { if(x>0){ return x*x; }else{ return -x*x; } }
若是函数多个参数,那么小括号()
也不能省略:code
// 两个参数: (x, y) => x * x + y * y // 无参数: () => 3.14 // 可变参数: (x, y, ...rest) => { var i, sum = x + y; for (i=0; i<rest.length; i++) { sum += rest[i]; } return sum; }
若是要返回一个表达式的话,这样写会报错:对象
x => {foo.x}
由于和函数体的{...}
有冲突,因此要改成:作用域
x => ({foo.x})
不使用箭头函数的时候,在对象的方法中使用this须要使用hack写法:get
var obj = { birth: 1990, getAge: function () { var _this = this; var fn = function () { return new Date().getFullYear() - _this.birth; // this指向window或undefined }; return fn(); } };
如今,箭头函数彻底修复了this
的指向,this
老是指向词法做用域,也就是外层调用者obj
:io
var obj = { birth: 1990, getAge: function () { var b = this.birth; // 1990 var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象 return fn(); } }; obj.getAge(); // 25