2017-02-22 21 views
0

Ребята, некоторые теории работают здесь.Значение аргумента по умолчанию для функции, назначение деструкции

Там есть функция -

function lol({ x = 10 } = {}, { y } = { y : 10 }) { 
console.log(x, y) 
}; 

Вещи становятся волосатыми здесь

lol(); // 10, 10 
lol({}, {}); // 10, undefined 
  1. Почему я получаю undefined после прохождения пустого объекта?
  2. И почему я получаю значение по умолчанию 10 за y когда lol()?

Я потерян, нужна помощь!

+0

Это, по существу, тот же вопрос, [этот] (http://stackoverflow.com/q/42093572/417562). – lonesomeday

+0

Действительно, нужно искать более тщательно. –

ответ

1

Если вы:

(function ({x = 10}) { 
    console.log(x) 
})() 

Там будет TypeError: не может сравниться с 'неопределенным' или 'нулевой' и если вы пытаетесь:

(function ({x} = {}) { 
    console.log(x) 
})() 

Теперь это дает undefined.


Это следующим образом:

function({x} = {}) { ... } 

x сочетается с undefined, так как нет объект на правой стороне ручного назначения не обладает свойством x.

function({x = 10} = {}) {...} 

Опять же, x получает соответствие с undefined так, он принимает значение по умолчанию 10.


С другой стороны, ваш второй аргумент (взятый отдельно)

function({ y } = { y : 10 }) {...} 

здесь, матч происходит и y получает значение, как 10 , но когда вы передаете пустой объект, аргумент по умолчанию объект {y : 10} получает переопределение.

что эквивалентно иметь:

function({ y } = {}) {...} 

Здесь, у вас нет ничего, чтобы соответствовать у с, поэтому он получает значение undefined

+0

Ничего себе, спасибо, Амреш! Теперь я достиг 100% этой темы. Очень богатое объяснение. –

+0

:) Рад, что это было полезно. –

0

Why am i getting undefined after passing empty object?

Потому что вы использовали объект, поэтому никакого назначения значения по умолчанию не происходит.

  lol(    {},   {}  ); // 10, undefined 
function lol({ x = 10 } = {}, { y } = { y : 10 }) { 
// resolves to 
function lol({ x = 10 } = {}, { y } = {}  ) { 

And why am i getting default value of 10 for y when lol()?

Потому что вы не предоставили объект. Затем выполняется объект по умолчанию, и деструктурирование происходит с объектом по умолчанию.

  lol(         ); // 10, undefined 
function lol({ x = 10 } = {}, { y } = { y : 10 }) { 
// resolves to 
function lol({ x = 10 } = {}, { y } = { y : 10 }) { 
2

Когда вы проходите ничего для y вы получите значение по умолчанию { y : 10 } следовательно y 10.

Когда вы передаете пустой объект JS пытается получить y собственность из-за { y }. Поскольку объект не имеет y, вы получаете undefined.