如何排除闭包中未定义的参数?

How to exclude undefined parameters in a closure?

关于 closuresJavaScript 练习题如下:

更改函数以支持多个函数调用:

function joinWords(a, b) {
    return console.log(a + ' ' + b);
}

请参阅下面的示例案例,了解示例输入及其预期输出。

输入 1:
const greet = joinWords("你好");
问候(“世界”);
输出 1:
“你好世界”

输入 2:
const greet = joinWords("Hey", "there!");
greet("Where", "is", "Foo", "Bar?");
输出 2:
“嘿!Foo Bar 在哪里?”

对于解决方案,我已经成功实现了一个闭包,但我仍然在控制台记录未定义的参数。也就是,对于第一个测试用例(输入 1 和输出 1),我正在输出 Hello undefined World undefined undefined undefined。 如何优雅地排除未定义的参数?

function joinWords(a, b) {
    return function(c, d, e, f) {
    console.log(
        a + ' ' + b + ' ' + c + ' ' + d + ' ' + e + ' ' + f
    );
  };
}

您可能正在寻找 rest parameters,它使函数接受任意数量的参数并将它们作为数组传递(然后可以调用 .join 方法):

 function joinWords(...values) {
   return values.join(" ");
 }