42

新しい ES6 モジュール構文では、JavaScript エンジンはすべてのインポート/エクスポートを知るためにコードを評価する必要がなく、解析するだけで何をロードするかを「認識」します。

これは巻き上げのように聞こえます。ES6 モジュールは吊り上げられていますか? もしそうなら、それらはすべてコードを実行する前にロードされますか?

このコードは可能ですか?

import myFunc1 from 'externalModule1';

myFunc2();

if (Math.random()>0.5) {
    import myFunc2 from 'externalModule2';
}
4

3 に答える 3

3

ES6 仕様は変更される可能性がありますが、このドラフトは明示的です。

静的変数の解決とリンク パスは、インポートされた変数名の競合をチェックします。インポートされた 2 つの名前、またはインポートされた名前と別のローカル バインディングの間に競合がある場合、コンパイル時エラーになります。

実行時にインポートしようとするのは、ES6 だけでなく疑わしい考えです。また、ドラフトから:

コンパイルは、すべての変数の定義と参照を解決して検証します。リンクはコンパイル時にも発生します。リンクは、すべてのモジュールのインポートとエクスポートを解決して検証します。

Babel の ES6 実装があまり満足していないことがわかります。

于 2015-03-29T14:16:03.433 に答える