编写一个可以作为('say')('hi')()调用的函数

时间:2019-04-09 17:42:28

标签: javascript

编写一个可以被调用为函数的函数,该函数将返回一个函数,直到不存在任何参数,然后返回一个字符串。

console.log(say('my')('name')('is')('bob')()); => 'my name is bob.'
console.log(say('hello')('world')()); => 'hello world.'

3 个答案:

答案 0 :(得分:2)

您可以使用返回匿名函数的函数。此匿名函数以递归方式调用原始函数以构建字符串,并在不提供任何参数的情况下将其返回。

function say (value){     
    return function (str){
      return str === undefined ? (value + ".") : say(value + " " + str);
  }	
}

console.log(say('my')('name')('is')('bob')());
console.log(say('hello')('world')());

答案 1 :(得分:0)

您可以使用递归调用相同的函数。

function say(msg) {
  if (msg.indexOf('undefined') == -1) {
    return function(m) {
      return say(msg + ' ' + m);//recursion
    };
  }
  return msg.split(' ').slice(0, -1).join(' ');//remove last 'undefined'
}
console.log(say('my')('name')('is')('bob')()); //=> 'my name is bob.'
console.log(say('hello')('world')()); //=> 'hello world.'

答案 2 :(得分:0)

这是我想出的。

function say(a) {
    let str = [];
    function _say(s) {
        if (s) {
            str.push(s);
            return _say;
        }
        return `${str.join(' ')}.`;
    }
    return _say(a);
}

console.log(say('my')('name')('is')('bob')());
console.log(say('hello')('world')());