实现函数 functionFunction,调用之后满足如下条件:
1、返回值为一个函数 f
2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ', '
3、所有函数的参数数量为 1,且均为 String 类型
functionFunction('Hello')('world')
Hello, world
functionFunction('Hello')('world')Hello, world
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;
};
}