欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

高阶函数(箭头函数)

程序员文章站 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

相关标签: ECMAScript