代码之家  ›  专栏  ›  技术社区  ›  GladstoneKeep

函数参数对象分解会导致未定义的变量

  •  1
  • GladstoneKeep  · 技术社区  · 7 年前

    function foo ({ a: { b }}) {
      // stuff
    }
    

    假设我想解构 并访问两者 a b 遗憾的是

    function foo ({ a: { b }}) {
      return [a, b]
    }
    foo({ a: { b: 123 }})
    // ReferenceError: a is not defined!
    

    这是节点中的错误还是ES6的预期行为?不应该两者都有吗 是否在函数中定义?如果不是,为什么分解会产生取消定义基本属性名称的效果( )?

    使用参数分解 两者兼得 b 在函数中定义?我明确地试图避免手动破坏它们。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Yury Tarabanko    7 年前

    这是节点中的错误还是ES6的预期行为?

    这是预期行为。因为 {a: {b}} 无法绑定 a 作为一个名称,它只是表示您想要访问 已分解对象的属性。

    您可以使用以下内容。

    function foo ({ a, a: {b} }) {
      return [a, b]
    }
    console.log(foo({ a: { b: 123 }}))