如何用更简洁写法实现:存在callback时调用它,否则调用默认回调函数?
更精简的回调函数 fallback 实现
嘿,你的需求其实可以用几种更简洁的方式来实现,完全能去掉冗余的if-else分支,让代码更清爽:
1. 参数默认值(最推荐)
这是最直观也最精简的写法,直接在函数参数里指定默认值,当没有传入callback或者传入undefined时,自动使用defaultCallback:
function defaultCallback(x) { console.log('default callback ' + x) } function test(callback = defaultCallback) { const x = 'x'; callback(x); }
调用方式和原来完全一致:
test()→ 触发defaultCallbacktest(myCustomCallback)→ 触发自定义回调
2. 逻辑或运算符(短路求值)
利用JavaScript的短路特性,快速选中要执行的函数:
function defaultCallback(x) { console.log('default callback ' + x) } function test(callback) { const x = 'x'; (callback || defaultCallback)(x); }
这里callback || defaultCallback会先检查callback是否为“真值”,如果是就用它,否则 fallback 到defaultCallback。注意:如果你的场景中callback可能传入假值(比如0、'')但仍然需要作为有效回调,这种写法就不适用了。
3. 空值合并运算符(更严谨)
ES2020引入的??运算符只会在左侧是null或undefined时才返回右侧值,比||更精准,适合严格判断“是否传入回调”的场景:
function defaultCallback(x) { console.log('default callback ' + x) } function test(callback) { const x = 'x'; (callback ?? defaultCallback)(x); }
这种写法下,只有当callback是null或undefined时才会用默认回调,其他任何值(包括假值)都会被当作有效回调执行。
这几种写法都能达到和你原来代码一样的效果,但代码量更少,可读性也更强~
内容的提问来源于stack exchange,提问作者Juicy
相关产品推荐
相关产品推荐

