2016-09-27 10 views
1

スローデフォルトパラメータは、エラー

add(1,2); // returns 3 
コード作業罰金以上

が、我々はとしてそれを呼び出す場合:

add(undefined, 2); //throws error 

ES6でどのように内部的にパラメータが解析されているのかわからないため、最後にエラーが発生します。 firstのデフォルト初期化子が評価されたときに

+1

スロー?エラーメッセージを投稿してください。 – Bergi

+0

エラー:キャッチされていないReferenceError:秒が定義されていません –

答えて

3

secondがまだ初期化されていない、それがアクセスすることがbeing in scopeにもかかわらず、スローされますtemporal dead zoneではまだです。

あなたは2番目のパラメータはオプションにする必要があります。

function add(first, second = first) { return first + second; } 
// and call it as 
add(2); 
add(2, undefined); 

あなたが本当にオプションの最初のものを作りたい場合は、関数本体でそれをしなければならない:

エラーがそれをしない
function add(first, second) { return first + (second === undefined ? first : second); } 
+0

このエラーのために私は立ち往生していません。秒がまだ初期化されていないと言うなら、最初のケースではなぜエラーをスローしないのですか? add(1,2)は素晴らしい作品です!その理由のためだけに、私は働いていて作業していない例をputtedしています。 –

+1

'undefined'(または何もない)以外のものを渡すと、デフォルトのintialiserは全く評価されないので、' second'へのアクセスは起こりませんスローしません。 – Bergi

関連する問題