zoukankan      html  css  js  c++  java
  • 函数绑定与函数柯里化

    函数绑定

    函数绑定要创建一个函数,可以在特定的this环境中以指定参数调用另一个函数

    实现一个简单的bind函数

    function bind(fn, context) {
      return function() {
        return fn.apply(context, arguments)
      }
    }
    

    在bind()中创建了一个闭包,闭包使用apply()调用传入的函数,并给apply()传递context对象和参数

    函数柯里化

    函数柯里化用于创建已经设置好了一个或多个参数的函数。它也是使用闭包返回一个函数,不过它与函数绑定的区别是当函数被调用时,返回的函数还需要设置一些传入的参数

    实现一个简单的柯里化函数

    function curry(fn) {
      // 获取除函数外的其他参数,组成一个数组
      const args = Array.prototype.slice.call(arguments, 1)
      return function() {
        // 获取返回函数中的参数
        const innerArgs = Array.prototype.slice.call(arguments)
        const finalArgs = args.concat(innerArgs)
        return fn.apply(null, finalArgs)
      }
    }
    

    通过函数柯里化,我们可以实现一个简单叠加运算

    function add(...nums) {
      let sum = 0
      nums.forEach(item => {
        sum += item
      })
      return sum
    }
    
    console.log(curry(add, 1, 2, 3)(4, 5, 6)) // 21
    
  • 相关阅读:
    win8 win10 安装msi 提示2502、2503的错误代码
    本地wamp的Internal Server Error错误解决方法
    安卓客户端测试总结
    测试bug级别定义
    测试流程
    测试人员的分工
    web安全测试-AppScan使用分享
    性能测试-小计
    0基础学java_字节流和字符流
    0基础学java_通配符
  • 原文地址:https://www.cnblogs.com/chenzilin/p/13123860.html
Copyright © 2011-2022 走看看