2016-07-30 3 views
1

ES6 letキーワードでモジュールパターン(拡張)を使用しているときにエラーが発生しました。ES6のモジュールパターンエラー

これは機能します。

var Example = (Example => { 
    Example.name = ""; 
    return Example; 
})(Example || {}); 

console.log(Example); 

これはありません。

このエラーが発生します。

Uncaught ReferenceError: Example is not defined

})(Example || {}); 
    ^^^^^^^ 

答えて

2

あなたは、この実現するときの答えはかなり明確になる:

var x = undefined 
x = (j => j)(x) 

それは本当に前xundefinedとして式を評価し、xへの設定を宣言します。この

var x = (j => j)(x) 

..becomesを結果。

しかし、letは、そのプロパティを持っていない - それが掲揚いない:ちょうどそのように評価

let y = (j => j)(y) 

..getsを。

y(j => j)(y)を実行すると存在しないため、参照エラーが発生します。

+1

パーフェクト。一束@towerofnixありがとう:) –

1

var宣言は、名前が(スコープブロックとは対照的に)全体の機能の範囲内で割り当てられるまで、「宣言」が、undefined考えられることを意味し、hoistedあります。それどころか、ES6 letの宣言はホイストされないため、Exampleを参照すると、まだ宣言されていないため、ReferenceErrorが発生します。

+0

ありがとう@パトリックロバーツ:) –