高阶函数(箭头函数)

箭头函数顾名思义它有一个箭头 =>,它是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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要重构JavaScript的高阶函数,可以考虑以下几个方面: 1. 使用箭头函数箭头函数提供了简洁的语法,可以让代码更加清晰易读。将普通函数转换为箭头函数可以减少冗余的代码,并且更好地展示函数的意图。 例如,将普通函数重构为箭头函数: ```javascript // 普通函数 function square(x) { return x * x; } // 重构为箭头函数 const square = x => x * x; ``` 2. 函数柯里化(Currying):将一个接受多个参数的函数转换为一系列只接受单个参数的函数。这种转换可以使函数更加灵活,便于复用和组合。 例如,将一个接受多个参数的函数重构为柯里化函数: ```javascript // 普通函数 function add(x, y) { return x + y; } // 重构为柯里化函数 const add = x => y => x + y; ``` 3. 使用高阶函数高阶函数接受一个或多个函数作为参数,并返回一个新的函数。通过使用高阶函数,可以将一些通用的逻辑抽象出来,减少代码的重复性。 例如,使用高阶函数重构过滤数组的逻辑: ```javascript // 普通函数 function filterArray(array, predicate) { const result = []; for (let i = 0; i < array.length; i++) { if (predicate(array[i])) { result.push(array[i]); } } return result; } // 重构为高阶函数 const filterArray = (array, predicate) => array.filter(predicate); ``` 以上是一些常见的重构技巧,当然具体的重构方式还需要根据实际情况来确定。重构的目标是提高代码的可读性、可维护性和可重用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值