ES6 Default value parameter for callback
本问题已经有最佳答案,请猛点这里访问。
我有几个带有可选回调的函数:
1 2 3 4 5 | let myFunc = (callback) => { callback = callback || (() => {}); // do something... callback(); } |
编写回调默认参数的最佳方法是什么?
以下任何解决方案都不能满足我的要求:
1如果定义了回调:1 2 3 | if (typeof callback === 'function') { callback(); } |
一点也不紧凑!
2实用功能:1 2 3 4 5 6 7 8 | let safeFunc = (callback) => { return callback || (() => {}); }; let myFunc = (callback) => { // do something... safeFunc(callback)(); } |
但问题是,在
1 2 3 4 | let myFunc = (callback) => { // do something... safeFunc(callback).call(this); } |
用户不太友好。
4创建ID函数1 2 3 4 5 6 | const ID = () => {}; let myFunc = (callback=ID) => { // do something... callback(); } |
具有外部依赖性,功能不太好,但可能是最佳选择。
这是另一个选择。
5只要一张支票……1 | if (callback) callback(); |
如果您想防止调用回调两次,我在这里调用的另一个实用函数callit,它还处理传递参数,如果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function callIt(that, fn) { if (fn) fn.apply(that, Array.prototype.slice.call(arguments,2)); } //Test Object function Test() { this.test = 'Test'; } Test.prototype.calltest = function (callback) { callIt(this, callback, 1, 2, 3); } var t = new Test(); t.calltest( function (a,b,c) { console.log('this.test = ', this.test); console.log('args = ', a, b, c); } ); |
直接调用
1 2 3 4 | let myFunc = (callback = Function()) => { // do something... callback(); } |
调用
1 2 | let noopFunc = Function() noopFunc() // => undefined |
//ES6方式:(默认参数)
1 2 3 4 5 | function(callback=()=>{}) { if(typeof callback === 'function') { callback(); } } |