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

时间:2017-08-01 15:58:21

标签: javascript ecmascript-6 destructuring

我正在运行Node v6.6.0,它支持解构函数参数:

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

假设我要解构并访问ab 。可悲的是,以下似乎有效:

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

这是Node中的错误还是这是ES6的预期行为?不应该在函数中定义ab吗?如果没有,为什么解构具有取消定义基本属性名称(a)的效果?

有没有办法使用参数解构来同时在函数中定义ab?我明确地试图避免手动解构它们。

1 个答案:

答案 0 :(得分:4)

  

这是Node中的错误,还是这是ES6的预期行为?

这是预期的行为。由于{a: {b}}没有将a绑定为名称,因此它只表示您要访问解构对象的a属性。

您可以使用以下内容。



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