我无法理解的函数的语法差异

问题描述 投票:0回答:1

我正在为广度优先搜索算法编写函数。我会想出以下代码

traverseBF() {
        const results = []
        const queue = [this.root]
        while (queue.length) {
            let node = queue.shift()
            if (node.children) {
                queue.push(...node.children)
            }
            results.push(node)
        }
        return results
    }

但是,解决方案的写法有些不同

traverseBF(fn) {
        const queue = [this.root]
        while (queue.length) {
            let node = queue.shift()
            if (node.children) {
                queue.push(...node.children)
            }
            fn(node)
        }
    }

我无法解释fn(node)的目的是什么或它如何返回正确的结果。这是某种递归调用吗?两种解决方案有何不同?

javascript algorithm tree traversal breadth-first-search
1个回答
0
投票

不是像您一样返回结果,而是允许用户传递一个函数,该函数在遍历每个节点时都会传递它。

例如尝试:

obj.traverseBF(node => console.log(node))

或者只是

obj.traverseBF(console.log)

也应该工作。 console.log被赋予每个要使用的节点。

这可以说是更普遍的用途。如果树很大,那么如果用户不需要一次所有结果,将所有结果存储在列表中可能会浪费内存。

© www.soinside.com 2019 - 2024. All rights reserved.