实现函数 functionFunction,调用之后满足如下条件:
1、返回值为一个函数 f
2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ', '
3、所有函数的参数数量为 1,且均为 String 类型
console.log(functionFunction(1)(2)(3))这个用例对function functionFunction(str) {var f = function(s){returnstr+", "+s;}returnf;}是通不过的啊
let curry4 = (fn, ...args) => fn.length <= args.length ? fn(...args) : curry4.bind(null, fn, ...args); let functionFunction = curry4(function(a, b){ let ret = Array.prototype.slice.call(arguments); return ret.join(', '); });
function functionFunction(str) { return function(str1){ return str + "," + str1 } } functionFunction('Hello')('world')
function functionFunction(str) { var fn = function(str2){ return str + ", " + str2; }; return fn; }
//输入: functionFunction('Hello')('world') //输出: Hello, world
分析: 首先返回值是一个函数,所以定义一个函数变量fn 由示例可以看出返回函数的参数为一个字符串(str2) 返回函数fn的返回值为:外面主函数的参数str与返回函数fn的参数str2字符串的拼接, 中间通过", "隔开。 故fn函数:
return str + ", " + str2;
function functionFunction(str) { var f=function(str1){ return str+', '+str1; } return f; }函数的作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。作用域前端始终是当前执行的代码所在环境的变量对象。从前端向后端逐级回溯,直到找到全局执行环境
var f = (tmp) => functionFunction(str + ', ' + tmp) f.valueOf = () => str return f
var f = (tmp) => str+', '+tmp return f
function functionFunction (arg1) { return function(arg2){ return arg1 + ', ' + arg2; }; }