使中间参数可选的惯用方法

时间:2016-04-06 14:22:30

标签: javascript arguments ecmascript-6 optional-arguments

实现JavaScript函数的常用方法是什么,其中间参数是可选的,但最后一个参数是必需的?首选惯用的ES2015解决方案。

,例如,我经常看到可以通过多种方式调用的函数,如:

func(firstArg, callback);
func(firstArg, options, callback);

实际上,实际发生的是参数的数量会影响每个参数的解释。

我知道我可以通过检查参数的长度来处理这个问题,如下所示:

//     func(firstArg, options, callback);
// or: func(firstArg, callback);
function (firstArg, ...args) {
    let options = {};
    if (args.length > 1) {
        options = args.shift();
    }
    let callback = args[0];
    // And do stuff ...
}
但是看起来很笨重。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

使用..argspop()来自数组的回调:

function thing(...args) {
  var cb = args.pop();
  //... args is now [1, obj]
  cb(args[0]);
}

thing(1, { a: 1 }, function (data) {
  console.log(data); // 1
});

答案 1 :(得分:0)

惯用方法涉及类型检查。您还可以利用默认参数。

function test(firstArg, callback, options = {}) {
  if (typeof options == 'function') {
    callback = arguments[2];
    options = arguments[1];
  }

}

这不仅可以确保您始终拥有选项对象,而且还可以在有人切换callbackoptions的参数时起作用。因此,选项是第二个还是最后一个并不重要。此外,也许更重要的是,源代码清楚地告诉我们它的意图。