使用嵌套函数时无法读取未定义的属性“推送”

问题描述

为什么下面的代码有效

const inorderTraversal = (root) => {
    let out = []

    const traverse = (node) => {
        console.log(node)
        if (!node) return
        traverse(node.left)
        out.push(node.val)
        traverse(node.right)
    }
    traverse(root)
    return out
};

但是这个没有

const inorderTraversal = (root) => {
    let out = []

    const traverse = (node,arr) => {
        if (!node) return
        traverse(node.left)
        arr.push(node.val)
        traverse(node.right)
    }
    traverse(root,out)
    return out
};

我需要修改多个二叉树的算法,但是当将数组作为参数而不是全局变量发送时,我收到 Cannot read property 'push' of undefined 错误

解决方法

在第二个脚本中,您编写了 traverse(node.right),但是,由于您的 traverse 函数现在有两个参数,而您只传入一个,因此 arr 未定义。然后,在递归函数调用中,您会收到关于语句 arr.push(node.val) 的警告,因为您试图在 push 上调用 arr 方法,即使该变量未定义。