Я запускаю 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
определенные в функции? Я явно пытаюсь избежать ручного разрушения их.
Является ли эта ошибка в узле или это ожидаемое поведение для ES6?
Это ожидаемое поведение. Поскольку {a: {b}}
не связывает как имя это просто означает, что вы хотите получить доступ a
a
свойству деструктурированного объекта.
Вы можете использовать следующее.
function foo ({ a, a: {b} }) {
return [a, b]
}
console.log(foo({ a: { b: 123 }}))
a
просто обозначает, какое свойство параметраb
следует брать. Он не определен или недоступен как параметр. Если вы хотите получить доступ кa
, вам придется извлечьb
самостоятельно в рамках функции.