饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的( 二 )


饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
柯里化是函数式编程的一个重要技巧 , 将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术
函数式编程另一个重要的函数compose , 能够将函数进行组合 , 而组合的函数只接受一个参数 , 所以如果有接受多个函数的需求并且需要用到compose进行函数组合 , 就需要使用柯里化对准备组合的函数进行部分求值 , 让它始终只接受一个参数
借用冴羽博客中的一个例子
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
使用方法:
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
通过占位符能让柯里化更加灵活 , 实现思路是 , 每一轮传入的参数先去填充上一轮的占位符 , 如果当前轮参数含有占位符 , 则放到内部保存的数组末尾 , 当前轮的元素不会去填充当前轮参数的占位符 , 只会填充之前传入的占位符
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
使用方法:
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
偏函数和柯里化概念类似 , 个人认为它们区别在于偏函数会固定你传入的几个参数 , 再一次性接受剩下的参数 , 而函数柯里化会根据你传入参数不停的返回函数 , 直到参数个数满足被柯里化前函数的参数个数
Function.prototype.bind函数就是一个偏函数的典型代表 , 它接受的第二个参数开始 , 为预先添加到绑定函数的参数列表中的参数 , 与bind不同的是 , 上面的这个函数同样支持占位符
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
利用函数记忆 , 将之前运算过的结果保存下来 , 对于频繁依赖之前结果的计算能够节省大量的时间 , 例如斐波那契数列 , 缺点就是闭包中的obj对象会额外占用内存
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
函数的bind方法核心是利用call , 同时考虑了一些其他情况 , 例如bind返回的函数被new调用作为构造函数时 , 绑定的值会失效并且改为new指定的对象定义了绑定后函数的length属性和name属性(不可枚举属性)绑定后函数的原型需指向原来的函数
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
原理就是将函数作为传入的上下文参数(context)的属性执行 , 这里为了防止属性冲突使用了ES6的Symbol类型
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
使用方法:
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
run函数接受一个生成器函数 , 每当run函数包裹的生成器函数遇到yield关键字就会停止 , 当yield后面的promise被解析成功后会自动调用next方法执行到下个yield关键字处 , 最终就会形成每当一个promise被解析成功就会解析下个promise , 当全部解析成功后打印所有解析的结果 , 衍变为现在用的最多的async/await语法
饭后小八卦|27 个 JavaScript 技巧,中级前端工程师必须要掌握的
文章图片
leading为是否在进入时立即执行一次 , trailing为是否在事件触发结束后额外再触发一次 , 原理是利用定时器 , 如果在规定时间内再次触发事件会将上次的定时器清除 , 即不会执行函数并重新设置一个新的定时器 , 直到超过规定时间自动触发定时器中的函数