Деструктуризация объекта параметра функции приводит к неопределенным переменным

1

Я запускаю Node v6.6.0, который поддерживает аргументы функции деструктуризации:

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

Предположим, я хочу разрушить и получить доступ к a и b. К сожалению, следующее не работает:

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

Является ли эта ошибка в узле или это ожидаемое поведение для ES6? Не следует ли определять функции a и b в функции? Если нет, то почему деструктуризация влияет на определение базового имени свойства (a)?

Есть ли способ, которым я могу использовать деструктуризацию параметров, чтобы получить как a и b определенные в функции? Я явно пытаюсь избежать ручного разрушения их.

  • 0
    a просто обозначает, какое свойство параметра b следует брать. Он не определен или недоступен как параметр. Если вы хотите получить доступ к a , вам придется извлечь b самостоятельно в рамках функции.
Теги:
ecmascript-6
destructuring

1 ответ

4
Лучший ответ

Является ли эта ошибка в узле или это ожидаемое поведение для ES6?

Это ожидаемое поведение. Поскольку {a: {b}} не связывает как имя это просто означает, что вы хотите получить доступ a a свойству деструктурированного объекта.

Вы можете использовать следующее.

function foo ({ a, a: {b} }) {
  return [a, b]
}
console.log(foo({ a: { b: 123 }}))
  • 0
    Ах, так просто! Это даже не приходило мне в голову как возможность. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню