首页 > 试题广场 >

返回函数

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

输入

functionFunction('Hello')('world')

输出

Hello, world
//可接受任意个参数
function functionFunction(str) {
   var args=Array.prototype.slice.call(arguments,0);
var f=function(){
       var args_f=Array.prototype.slice.call(arguments,0);
       args_f=args.concat(args_f);
       return functionFunction.apply(this,args_f);
   }
   f.valueOf=function(){
       return args.join(", ");
   }
   f.toString=function(){
       return args.join(", ");
   }
   return f;
}
发表于 2017-04-07 00:52:35 回复(3)
function functionFunction(str) {
    let f = function(s) {
        return str + ', ' + s;
    }
    return f;
}

发表于 2022-03-27 21:14:09 回复(0)
function functionFunction(str) {   
        return function(str1) {
            return str + ', ' + str1
        } 
}
发表于 2022-03-24 21:17:31 回复(0)
一时间没理解题题目,而且,这东西在逗号后面还要加个空格,确实坑苦了我一把。
代码结合ES6和闭包,兼容了传入多参数的情况。
function functionFunction(...str) {
    return function(...res){
           return [...str,...res].join(', ');
    }
}


发表于 2020-04-09 14:01:33 回复(0)
搞半天原来逗号后面差个空格
function functionFunction(str) {
    var f = function(str2){
        return str+", "+str2;
    }
    return f;
}

发表于 2020-03-24 18:30:51 回复(0)
function functionFunction(str) {
    return function f(){
        let args = [].slice.call(arguments);
        return str + ', ' + args.join(", ")
    }
}
发表于 2020-01-12 20:55:59 回复(0)
function functionFunction(str) {
  return function(innerStr) {
    return str + ", " + innerStr;
  }
}


发表于 2017-05-17 23:38:39 回复(0)

function functionFunction(str) {
  if(typeof str == 'string' && arguments.length == 1) {
        function f(str1) {
            return functionFunction(str + ',' + str1);
        }
        f.valueOf = function () {
            return str;
        }
        return f;
  }else{
      return false;
  }
}

发表于 2017-03-14 11:17:47 回复(1)
function functionFunction(str) {
	return f=function(str2){
        return str+", "+str2;
    }
}
 其实f被后面的str2马上调用了,所以不用再return f,靴靴
发表于 2017-02-19 19:05:59 回复(2)
当 Function 对象开始执行时,脚本引擎将 arguments 对象的 length 属性初始化为传递给该函数的实际参数数目。
function functionFunction(str) {
if(typeof str == "string" && arguments.length == 1){
var f = function fun(str2){
if(typeof str2 == "string" && arguments.length == 1){
return str + ", " + str2;
}
}
return f;
}
}
发表于 2016-10-16 15:50:19 回复(0)
思想:首先定义一个函数,判断参数类型是字符串,然后进行拼接,记住拼接的中间位置是什么。 拼接字符为英文逗号加一个空格,最后返回函数f。
代码如下:
function functionFunction(str) {
     var f=function(str2){  
                if(typeof(str)=="string" && typeof(str2)=="string")  
                    return str+', '+str2;//2、返回值  
                else return false;  
            };  
            return f;//1、返回函数f  
 }
发表于 2016-06-24 19:42:08 回复(0)
function functionFunction(str) {
return function (num){
        return str + ', ' + num;
    }
}
你大爷的空格
发表于 2015-10-13 16:20:48 回复(3)
function makeClosures(arr, fn) {
    var result = [] ;
    for(var i = 0 ;i < arr.length ;i++) {
        result[i] = fn.bind(null,arr[i]);
    }
    return result;
}
 使用 bind的延迟绑定功能
发表于 2015-09-20 15:17:01 回复(1)
首先执行functionFunction('Hello'),传入参数str,然后返回函数f,f与('world')组合,执行f('world'),传入参数s,f返回str+", "+s,即Hello, world。注意中间的逗号后面有一个空格。
function functionFunction(str) {
  var f = function(s){
         return str+", "+s;
     }
     return f;
 }

编辑于 2015-08-19 10:36:37 回复(30)
function functionFunction(str) {
	return function(){
        return str +', '+ arguments[0];
    }
}

发表于 2017-06-01 18:48:16 回复(0)
 function functionFunction() {
    var args = ([]).slice.call(arguments)
	var fn = function () {
        var args_fn = ([]).slice.call(arguments)
        return functionFunction.apply(null, args.concat(args_fn))
    }
    fn.valueOf = function () {
       	var res =  args.reduce(function (a, b) {
            return a +', ' + b
        })
        return res
    }
    return fn
}
可以实现链式多参数调用,但是不能通过测试用例。。。哪位大神告诉我为啥

编辑于 2017-03-27 23:17:12 回复(3)
function functionFunction(str) {
    var ret = Array.prototype.slice.call(arguments).join(', ');
    var temp = function(str) {
        ret = [ret, Array.prototype.slice.call(arguments).join(', ')].join(', ');
        return temp;
    };
    temp.toString = function(){
        return ret;
    };
    return temp;
}
测试用例:
//输出:Hello, World
functionFunction('Hello')('World').toString();
//输出:1, 2, 3, 4 
functionFunction(1)(2)(3,4).toString();

编辑于 2016-05-30 00:04:06 回复(32)
一个闭包就搞定了的。
function functionFunction (arg1) {
    return function(arg2){
        return arg1 + ', ' + arg2;
    };
}

发表于 2017-03-15 21:36:12 回复(8)
function functionFunction(str) {
    if (typeof str == "string" && arguments.length == 1) {
       return function(str2) {
           if (typeof str2 == "string" && arguments.length == 1) {
               return str + ", " + str2;
           }
       } 
    }
}

发表于 2015-10-17 23:04:26 回复(2)
坑在于空格
发表于 2018-03-11 14:48:56 回复(5)