Function.apply.bind理解

你不知道的js书中有下面这段代码,当时看的时候有种云里雾里的感觉,在这里记录一下自己的理解

一般我们会使用bind方法,实现函数this的重新绑定,并且可以柯里化传参,或者使用apply方法,马上执行一个函数并且给这个立即执行的函数指定一个this,传参则是数组形式。

下面这段代码我理解为,正常使用apply,是立即执行,但是加上了bind,函数就不会立即执行,反而是给Function绑定了this,this在这里为fn,然后结合apply的数组传参性质,使fn可以接受数组传参

    function spread(fn) {
      return Function.apply.bind(fn, null);
    }

fn以test函数为例

    function test(x, y) {
      console.log(`x = ${x}, y = ${y}`); 
    }

正常调用test函数,传参应该是1,2这样 

    test(1, 2);

 如果通过调用spread函数调用, 就可以这样写,可以看到,现在接收参数的形式从1,2变为了[1,2],输出结果则为 x = 1, y = 2

    spread(test)([1, 2])

其实也就是相当于,这样可能好理解一些

    function spread(fn) {
      return (v) => fn.apply(null, v);
    }

    spread(test)([1,2])

所以费了这么大劲,其实ES6中早就有了应对方法,就是解构(再次感叹ES6的便捷性)

    function test([x, y]) {
      console.log(`x = ${x}, y = ${y}`);
    }
    test([1, 2]);

所有提到的代码,只是在书中特定情况下使用

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值