如何直观理解这段JavaScript回调函数的工作机制?
二叉树层序遍历中回调逻辑解析
疑问代码行
callbackFn ? callbackFn(currentNode) : levelOrderList.push(currentNode.value);
核心逻辑验证
你的伪代码猜测完全正确,这段三元表达式的作用就是:
- 若
callbackFn存在(非null或undefined),则调用callbackFn(currentNode) - 否则将
currentNode.value推入levelOrderList
关于callbackFn的定义说明
callbackFn不是函数内部定义的,它是levelOrder函数的入参,在调用levelOrder时由外部传入。举两个实际调用场景:
- 传入回调函数的场景:
// 遍历过程中打印每个节点的值 tree.levelOrder(node => console.log(node.value));
此时三元表达式会执行传入的回调,不会往levelOrderList添加元素,函数最后也不会返回列表。
- 不传入回调的场景:
// 获取层序遍历的节点值列表 const result = tree.levelOrder();
此时三元表达式会把每个节点的value推入levelOrderList,遍历结束后函数返回这个列表。
完整代码逻辑梳理
这段代码是二叉树的层序遍历实现:
- 初始化队列,将根节点
this.root放入队列 - 循环处理队列:
- 取出队列头部的当前节点
currentNode - 根据是否有回调函数,选择对应的节点处理方式
- 收集当前节点存在的左右子节点,加入队列继续遍历
- 取出队列头部的当前节点
- 若
levelOrderList不为空(即未传入回调的情况),返回该列表
内容的提问来源于stack exchange,提问作者Brian N
相关产品推荐
相关产品推荐

