每日一题
使用 apply 调用函数
https://www.nowcoder.com/practice/d47b482e7148497582c7a995df51f393?tpId=6&tags=&title=&diffculty=0&judgeStatus=0&rp=1
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; }