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

bri*_*rns 5 javascript arguments optional-arguments ecmascript-6

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

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

func(firstArg, callback);
func(firstArg, options, callback);
Run Code Online (Sandbox Code Playgroud)

所以实际发生的是参数的数量影响每个参数的解释。

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

//     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 ...
}
Run Code Online (Sandbox Code Playgroud)

但看起来很笨拙。有一个更好的方法吗?

And*_*ndy 2

使用数组中的回调...args:pop()

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
});
Run Code Online (Sandbox Code Playgroud)