2017-12-14 19 views
6

が基準エラーをスロー同じ名前の変数を使用してデフォルト値を割り当てる:変数からのJSのデフォルト引数値:なぜ識別子が異なる必要がありますか?

var a = 'adef'; 
var x = (a=a) => console.log(a); 
x(); 
=> "ReferenceError: a is not defined" 

しかし、これは素晴らしいです:

var other = 'otherdef'; 
var x = (a=other) => console.log(a); 
x(); 
=> "otherdef" 

私の仮定は、外側のスコープ内aの値はというものでした新しいスコープに割り当てることができます。

(クロム63及びノード6で試験)I代わりvar、及びclass/functionの代わりに矢印機能のconstを使用して試みたが、結果は常に同じです。

私が持っている...問題はaが割り当て中に「掲揚」で、その割り当てが(存在しますが、定義されていません)新しい「A」を参照しているということです

+0

はい、[パラメータスコープ](https://stackoverflow.com/q/44896829/1048572)の 'a 'は確かに[hoisted](https://stackoverflow.com/q/31219420/1048572)です。 – Bergi

答えて

0

この動作の目的を感じて例えば、パラメータはデフォルトの初期化別のパラメータの値になるようにすることです:

var a = 2; 
var x = (a, b = a) => console.log(a, b); 
x(42); // 42 42 

特殊なケースa = a作品を作る異なっする行うことができるが、それはそれは難しく、これを使用する関数をリファクタリングすることになるだろう行動することはできません。パラメータはaであり、依存する変数の名前を変更する必要はありません。

関連する問題