ES6回调的默认值参数

时间:2016-11-30 13:57:00

标签: javascript ecmascript-6

我有几个带可选回调的函数:

let myFunc = (callback) => {
  callback = callback || (() => {});
  // do something...
  callback();
}

编写回调默认参数的最佳方法是什么?

以下解决方案都不能让我满意:

1如果定义了回调:

  if (typeof callback === 'function') {
    callback(); 
  }

根本不紧凑!

2效用函数:

let safeFunc = (callback) => {
  return callback || (() => {});
};

let myFunc = (callback) => {
  // do something...
  safeFunc(callback)();
}

但问题是在this之间发生了变化,在我的情况下这很重要。

3使用call

let myFunc = (callback) => {
  // do something...
  safeFunc(callback).call(this);
}

用户不太友好。

4创建ID功能

const ID = () => {};

let myFunc = (callback=ID) => {
  // do something...
  callback();
}

有外部依赖,不是很有用,虽然可能是最好的选择。

3 个答案:

答案 0 :(得分:1)

这是另一种选择。

5只是检查..

  if (callback) callback(); 

如果你想阻止两次调用回调,这里的另一个实用函数我称之为callIt,它也处理传递参数,如果this对于防止使用bind也很重要,只需传递{{1} } ..

this

答案 1 :(得分:0)

直接调用Function()构造函数看起来很有意义:

let myFunc = (callback = Function()) => {
  // do something...
  callback();
}

调用Function()会返回一个noop函数:

let noopFunc = Function()
noopFunc() // => undefined

答案 2 :(得分:-3)

// ES6方式:(默认参数)

function(callback=()=>{}) {
    if(typeof callback === 'function') {
        callback();
    }
}