2016-10-18 5 views
2

JSコードがたくさんあるモジュールがあります。モジュールは、そのように作成されます。JSコードがコンパイラによって解析/評価されないようにする方法は?

(function (root, factory) { 
    // root === window 
    root.MyModuleName = factory(); 
})(this, function() { 
    'use strict'; 
    var MyModuleName = function() { 
    // A lot of code here that I don't want to be parsed or evaluated 
    // until MyModuleName constructor is executed. 
    // 
    // For example: 
    // var a = { d: 123 }; 
    // var b = function() { return 45; }; 
    // this.someMethod = function() { b() + a.d }; 
    // ... 
    }; 
    return MyModuleName; 
}); 

すべてのメソッド&プロパティはMyModuleNameクロージャ内で、(私は思った)彼らはMyModuleName()が実行された後にのみ解析されるべきです。唯一クリックした後、その内部のコードはJSファイルのロード(評価され

someButton.onclick = function() { 
    // I want compiler to parse and evaluate JS code only here 
    var myModule = new MyModuleName(); 
    console.log(myModule.someMethod()); 
}; 

MyModuleNameコンストラクタが実行されていても():

ユーザーが、私はMyModuleNameのインスタンスを作成し、いくつかの方法を実行し、いくつかのボタンをクリックした後私はChromeの開発ツールのタイムラインでそれを見ることができます)。

JSファイルがロードされた後ではなく、コンパイラがクリック後にコードを評価するかどうかを確認するにはどうすればよいですか?

+1

スクリプト全体の構文エラーをチェックするためにコードを解析する必要がありますが、コードは通常、関数が呼び出されるまでコンパイルされません。あなたが "評価する"ことを意味しているかどうかは分かりません。 – Bergi

+0

コードを評価しないことで解決しなければならない問題は何ですか? – Bergi

+0

@Bergi、スクリプトの解析にはモバイルで時間がかかるため、スクロールしようとすると遅延が発生します。スクリプトタグのDefer属性があまり役に立たない場合は、遅れを遅らせるだけです。だから完全に実行/解析せずにJSファイルをプリロードしようとしています。ありがとうございました。 – Marvin3

答えて

1

できません。 JSエンジンは、どこにでも関数を割り当てる前に、関数を作成するコードを評価する必要があります。

+0

ええ、私はJITコンパイラがそれを助けるかもしれないと思った。答えてくれてありがとう。私は手動でjax要求または "プリフェッチ"リンクタグを介してJSファイルをプリロードする必要があると思います。 – Marvin3

関連する問題