高阶函数(箭头函数)
程序员文章站
2022-03-04 13:26:33
...
箭头函数顾名思义它有一个箭头 =>,它是es6新增一种函数。(Arrow Function)
//箭头函数与匿名函数相像
//箭头函数
let fun=(x)=>{ x+=1; }
//匿名函数
let fun=function(x){ x+=1; }
箭头数由两种格式
- 第一种大括号{ },return省略
//例子:
let fun = x => x += 1;
console.log(fun(2));//3
这种只用于单条语句
- 第二种相反,不得省略。用于多条语句
//例子:
let fun = (x) => {
if (x > 0) {
x *= x;
} else {
x = -x * -x;
}
return x;
}
console.log(fun(-2));//4
还有箭头函数可以有效的改变this指向的问题
例子:
//创建一个obj的对象
let obj = {
birthDay: 1999,
getAge: function () {
console.log(this.birthDay);
let fun = function () {
return new Date().getFullYear() - this.birthDay;
}
return fun();
}
}
console.log(obj.getAge());// 1999 NaN
在上面的例子中可知,fun函数内的this指向的是Window 或 undefined
要想改变其指向可有几种方案
-
hack写法
在fun函数外var than=this;将this.birthDay改为than.birthDay; -
指向的改变
将return fun();改成return fun.apply(obj , [ ]);
apply也可改为call但需要将参数做下修改.call(obj) -
箭头函数
let fun = () => new Date().getFullYear() - this.birthDay;
箭头函数中的this永远指向当前作用域,也就是obj
注意:在这里由于箭头函数指向当前,所以 call() , apply()对箭头函数进行调用时,无法对this进行绑定,因为第一个参数会被忽略
var obj = {
birthDay: 1990,
getAge: function (year) {
console.log(this.birthDay);
var fn = (year) => year - this.birthDay; // this.birthDay仍是1990
return fn.call({ birthDay: 2000 }, year);
}
};
console.log(obj.getAge(2015)); //1990 25
这里我借鉴于:https://www.liaoxuefeng.com/wiki/1022910821149312/1031549578462080#0