【发布时间】:2017-04-14 21:18:13
【问题描述】:
我有几个带有可选回调的函数:
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();
}
有外部依赖,不是很实用,但可能是最好的选择。
【问题讨论】:
-
不一定有“最佳”方式。 1 和 4 是很好的解决方案,但请注意它们不是等效的。如果传入一个不是函数的值,4 会抛出错误,1 不会。
-
我看不出这个问题是如何与引用的问题重复的。我也不明白为什么答案中有这么多反对票。
-
我认为 4 的更好方法是
callback = () => void 0。它解析为undefined,我们显式返回,并且留空 { } 会在 eslint 和 jslint 中出现错误。