首页 > 试题广场 >

返回函数

[编程题]返回函数
  • 热度指数:70529 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
实现函数 functionFunction,调用之后满足如下条件:
1、返回值为一个函数 f
2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ', '
3、所有函数的参数数量为 1,且均为 String 类型
示例1

输入

functionFunction('Hello')('world')

输出

Hello, world
// 多个,返回值类型为function 过不去检测?
function functionFunction(str) {
    var o = [...arguments]
    var f = function(...args) {
        o = [...o, ...args]
        return f
    };
    f.toString = function(){
        return o.join(', ');
    };
    return f;
}


发表于 2021-04-23 10:48:29 回复(0)
function functionFunction(str) {
    var tmpStr = ""
    if (str !== undefined) {
        tmpStr += str 
        return strConcat
    }

    function strConcat(s){
        tmpStr = tmpStr +", "+s
        return tmpStr
    }
}
定义一个内部函数实现第二次调用,这样可以获取到第一次调用后的字符串
发表于 2021-03-31 23:58:09 回复(0)
console.log(functionFunction(1)(2)(3))这个用例对
function functionFunction(str) {
  var f = function(s){
         returnstr+", "+s;
     }
     returnf;
 }
是通不过的啊

发表于 2020-12-29 14:49:16 回复(0)
function functionFunction(...args1) {
    return function(...args2){
        return args1.join(', ') + ', ' + args2.join(', ')
    }
}
发表于 2020-10-27 16:18:58 回复(0)
使用curry函数实现,可以轻松扩展 f(a)(b)(c)...(n) 的类似调用
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(', ');
});




发表于 2020-08-19 22:57:28 回复(0)
function functionFunction(str) {
    var f=(str2)=>str+', '+str2
    return f
}
感觉被玩弄了。。。
发表于 2020-04-07 18:38:38 回复(0)
精简van事了
function functionFunction(str1) {
    return str2 => str1 +", "+ str2
}

发表于 2020-02-26 20:05:40 回复(0)
知识点:柯里化。柯里化是指把一个多参的函数转为单参函数。(详见:http://www.ruanyifeng.com/blog/2017/02/fp-tutorial.html
但是,这段代码在这上面提交没有通过。在本地使用谷歌浏览器可以打印出结果,也就是说这段代码是可用的。(小白一个,不知道为什么在这个平台上不通过)
function functionFunction(str) {
    return function(str1){
        return str + "," + str1
    }
}
functionFunction('Hello')('world')

发表于 2019-08-07 11:25:39 回复(0)
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;

发表于 2019-06-24 15:50:18 回复(0)
function functionFunction(str) {
    return function(str2){return str + ", " + str2}
}
发表于 2018-12-01 11:46:51 回复(0)
参数确定情况下有很多人说了,我来说一下参数不确定的情况解决代码

function functionFunction(str1,str2,str3) {
var temp = "";//创建返回的数组
for (var i in arguments) {
temp = temp + arguments[i] + ", "; //拼接字符串
}
var f = function(s1,s2,s3) {
for (var i in arguments) {
temp = temp + arguments[i] + ","; //同上

}
return temp.substr(0, temp.length-1); //去除最后一个', '
}
return f;
} 

理解js函数内部对象arguments这一点就很容易写出这题。本人写完50题后会整理好测试用例和注释等发到github,有兴趣的请留意我的博客:https://blog.csdn.net/JellyMBR/article/details/84556578

编辑于 2018-11-26 21:24:25 回复(0)
闭包,不过这一块要重点理解作用域这些。。。
function functionFunction(str) {
    return function(s) {
        return str + ', ' + s;
    }
} 

编辑于 2018-10-28 20:47:13 回复(0)
// 考查知识点:作为值的函数@从一个函数中返回另一个函数,内层函数可以使用外层的参数
function functionFunction(str) {
    return function f(str1){
        return str+', '+str1;
    }
}


发表于 2018-10-24 20:42:40 回复(0)
function functionFunction(str) {
 var f=function(str1){
     return str+', '+str1;
 }
 return f;
}
函数的作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。作用域前端始终是当前执行的代码所在环境的变量对象。从前端向后端逐级回溯,直到找到全局执行环境
发表于 2017-09-05 18:04:17 回复(0)

可怕:

function functionFunction( str1 ){
    function f( str2 ){
        return str1 + ',' + str2
    }
    return f
}

这样不行\

function functionFunction( str1 ){
    function f( str2 ){
        return str1 + ', ' + str2
    }
    return f
}

',' 那里加一个空格: ', '

就行了

编辑于 2017-08-16 22:53:01 回复(0)
function functionFunction() {
	var _args = [].slice.apply(arguments);
    var _join = function(){
        if(arguments.length===0){
            return _args.join(', ');
        }else {
            [].push.apply(_args,[].slice.apply(arguments));
            return _join;
        }
    }
    return _join;
}

在Chrome调试通过,但是提交却不通过

发表于 2017-08-03 19:38:19 回复(0)
function functionFunction(str) {
    var arr = new Array();
    arr.push(str);
    return f = function(a){
        arr.push(a);
        return arr.join(",");
    };
}
感觉没毛病啊
发表于 2017-04-12 16:37:13 回复(0)
↓解决多参问题(然而编译器报错,把arrow function换成普通形式也错,摊手)
    var f = (tmp) => functionFunction(str + ', ' + tmp)
    f.valueOf = () => str
    return f
……真的是只有两个参数啊,然而
↓错(把arrow function换成普通形式就通过了……)
    var f = (tmp) => str+', '+tmp
    return f


编辑于 2017-03-16 22:56:37 回复(0)
一个闭包就搞定了的。
function functionFunction (arg1) {
    return function(arg2){
        return arg1 + ', ' + arg2;
    };
}

发表于 2017-03-15 21:36:12 回复(8)
function functionFunction(str) {
var ret = str;
var te=[]
var temp = function(str) {
te=ret.split(", ");
te.push(str);
ret=te.join(", ");
return temp;
};
temp.toString = function(){
return ret;
};
return temp;
}
functionFunction('H')('w')('d')('j')

编辑于 2017-02-26 10:20:01 回复(0)