【问题标题】:Cannot read property 'push' of undefined when when using nested functions使用嵌套函数时无法读取未定义的属性“推送”
【发布时间】:2021-06-26 14:57:36
【问题描述】:

为什么下面的代码有效

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 错误。

【问题讨论】:

  • arrtraverse 函数的第二个参数。当您调用traverse(node.left)traverse(node.right) 时,您只传递了一个参数。
  • 你不要在traverse(node.left)traverse(node.right)中传递arr作为第二个参数,应该是traverse(node.left, arr)traverse(node.right, arr)

标签: javascript tree inorder


【解决方案1】:

在你的第二个脚本中,你写了traverse(node.right),但是,因为你的traverse 函数现在有两个参数并且你只传入一个,arr 是未定义的。然后,在递归函数调用中,您会在语句 arr.push(node.val) 上收到警告,因为即使变量未定义,您仍试图在 arr 上调用 push 方法。要修复错误,请将arr 添加为函数调用的第二个参数。

【讨论】:

    猜你喜欢
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多