You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用更简洁写法实现:存在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() → 触发defaultCallback
  • test(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:57:04