data:2021-01-04
二次封装函数:
已知函数 fn 执行需要 3 个参数。请实现函数 partial,调用之后满足如下条件:
1、返回一个函数 result,该函数接受一个参数
2、执行 result(str3) ,返回的结果与 fn(str1, str2, str3) 一致

function partial(fn, str1, str2) {
    function result(str3){
        return fn.apply(this,[str1,str2,str3]);
    }
    return result;
}

注意:bind不加后面的括号返回的是函数,加上后面的括号返回的是函数值,这也是bind和call,apply的主要区别,bind需要二次调用,而call和apply返回的是函数值,是直接调用


闭包:
简单的描述闭包:如果在函数func内部声明函数inner,然后在函数外部调用inner,这个过程即产生了一个闭包。闭包最大的用处有两个:可以读取到函数内部的变量,让这些变量的值始终保持在内存中


实现函数 makeClosures,调用之后满足如下条件:
1、返回一个函数数组 result,长度与 arr 相同
2、运行 result 中第 i 个函数,即 resulti,结果与 fn(arr[i]) 相同

function makeClosures(arr, fn) {
    let result = []
    for(let i=0;i<arr.length;i++){
         result[i]=function(){
              return fn(arr[i]);
         }
    }
    return result;
}

arguments:
是一个除了箭头函数外所有函数都有的一个方法:用于接收函数传入的参数组能通过length获取到长度数量,能够通过下标(类似数组)获取到该位置的值,但是不能使用forEach等方法。


函数 useArguments 可以接收 1 个及以上的参数。请实现函数 useArguments,返回所有调用参数相加后的结果。本题的测试参数全部为 Number 类型,不需考虑参数转换。

function useArguments() {
    let sum =0;
    for(let i=0;i<arguments.length;i++){
        sum += arguments[i]
    }
    return sum;
}