2017-02-22 6 views
0

ここでは、いくつかの理論が働いています。関数のデフォルトの引数値、デストラクション代入

機能があります -

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

物事はなぜ、私は空のオブジェクトを通過した後undefinedを取得していますここ

lol(); // 10, 10 
lol({}, {}); // 10, undefined 
  1. を毛深い取得していますか?
  2. lol()を実行すると、yのデフォルト値が10になるのはなぜですか?

私は紛失しており、助けが必要です!

+0

に設定されます(http://stackoverflow.com/q/42093572/417562)。 – lonesomeday

+0

実際、より完全に検索する必要があります。 –

答えて

1

そうした場合:

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

はTypeError例外があるでしょう: '未定義' や 'NULL' 照合し、あなたがしようとすることはできません:

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

、これはundefinedを与えます。


これは、次の割り当ての右辺にないプロパティは、プロパティxを有していないよう

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

xは、undefinedと一致します。 undefinedがそう、それは10のデフォルト値をとると

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

ここでも、xがマッチします。一方


、あなたの第二引数は、(別個に)ここ

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

は、マッチが起こるとy10 として値を取得していますが、空のオブジェクトを渡し、デフォルト引数オブジェクト{y : 10}がオーバーライドされます。持つのと同じです

:ここ

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

は、あなたがyと一致するために何を持っていないので、これは基本的に[この1]と同じ質問ですundefined

+0

うわー、ありがとう、Amresh!今私はこの非常にトピックで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()?

は、オブジェクトを提供していませんでしたので。その後、デフォルトのオブジェクトが取得され、デフォルトのオブジェクトで構造が解除されます。あなたはJSが原因{ y }yプロパティを取得しようとすると、空のオブジェクトを渡すと

  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

です。オブジェクトにはyというプロパティがないので、undefinedとなります。

関連する問題