1.介绍
箭头函数是ES6标准新增的一种新的函数:Arrow Function(箭头函数),叫箭头函数的原因就是它的使用用法就是一个箭头
y=>y+y
2.基本用法
1.中的语句相当于
funtion(y){
return y+y;//y即是参数
}
箭头函数在语法上可以认为是匿名函数的一种缩写,你可以认为它是一个语法糖,在不同的情况下箭头函数的用法稍有不同,具体如下
//一.当函数只有一个参数时,可以不用括号,如1.中所示
//二.当函数有多个参数时,需用括号括住参数,如
(x,y)=>x+y
//相当于
function(x,y){
return x+y
}
//三.当函数内部只有一条或没有语句时,花括号可以省略
//如果这条语句还是return语句,那么return也可以一并省略,如1.中所示
//四.当函数内部有多条语句时,花括号不可省略,如
x=>{
x>100?x='输入的值大于100':x='输入的值小于100'
console.log(x)
}
//五.无参数的匿名函数
()=>{语句}
3.注意事项
一.如果单条语句return的是一个对象,那么在使用箭头函数时就不能省略花括号,这样做会引起语法冲突,因为js引擎会误将对象的花括号认作函数的花括号,举个例子
x=>{age:x}//错误
x=>{{age:x}}//正确
x=>({age:x})//正确
二.this
箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定,这种规则解决了许多es5中关于this指向不同带来的问题(比如嵌套函数或者对象中需要用临时变量来搬运this,或者使用bind),现在,箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj,如下
var obj = {
birth: 1990,
getAge: function () {
var b = this.birth; // 1990
var fn = () => new Date().getFullYear() - this.birth;
// 此处this指向obj对象,es5中会指向windows
return fn();
}
};
obj.getAge(); // 25
由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略:
var obj = {
birth: 1990,
getAge: function (year) {
var b = this.birth; // 1990
var fn = (y) => y - this.birth; // this.birth仍是1990
return fn.call({birth:2000}, year);
}
};
obj.getAge(2015); // 25