一、偏函数
    将程序中已知值和目标函数转化为一个等待未知值而执行的函数。初衷:将n元函数转化为n - x元函数。
    柯理化函数初衷:将n元函数转化为n个一元函数,当然也可以穿多个参数。

    1. function test(a,b,c){
    2. }
    3. function partial(){
    4. }
    5. let computor = partial(test,a);

    封装Function.prototype上的偏函数方法

    1. Function.prototype.partial = function(){
    2. let outterArgs = [].slice.call(arguments),
    3. originFoo = this;
    4. return function(){
    5. let innerArgs = [...arguments],
    6. combinedArgs = outterArgs.concat(innerArgs); //居然吧() 打成 []
    7. return originFoo.apply(originFoo, combinedArgs)
    8. }
    9. }
    10. function test (a,b,c){
    11. return a + b + c
    12. }
    13. let partialTest = test.partial(1,6);
    14. console.log(partialTest(8))

    二、惰性函数
    函数的执行分支后,在第一次调用函数时会执行,过程中原函数被覆盖为另一种函数,下一次调用时,不再经过执行的分支。本身有多个功能,第一次执行后,选择特定功能改变自身。

    1. function getTimeStamp (){
    2. let time = (new Date()).getTime();
    3. getTimeStamp = function(){
    4. return time
    5. }
    6. return getTimeStamp()
    7. }

    应用场景:
    当函数受不同外界因素影响,使用惰性函数,可以避免多次执行函数分支,比如封装添加事件监听函数。