0

私は HTML5 WebWorkers を使用していますが、このような問題に直面しました (クロージャ コンパイラでスクリプトをコンパイルしているときに):

内部にこのコードを含む 2 つのファイル (.js) があります。

...

var encoder = null;

...

つまり、同じ名前のグローバル変数が 2 つあります。

これらのファイルは、起動したい両方のワーカーのソースとして使用されます。私が知っているように、両方のファイルは独自のスコープで実行され、実行時に競合は発生しません。

もう1つの条件は、両方のファイル(モジュール)を一度にコンパイルしたいということです

--module module1:1

--js file

--module module2:1

--js file2.js

しかし、Closure Compiler はその競合を検出し、module2 は module1 に依存する必要があると言います。これは、両方とも同じグローバル変数を持っているためです。

私は何をすべきか?

4

1 に答える 1

3

いくつかの異なるオプションがあります。

  1. 変数をグローバル(ウィンドウ)オブジェクトのプロパティとして使用します。そのように定義されます:window.encoder = window['encoder'] || {};
  2. @suppress {duplicate}2番目の変数定義に注釈を追加します。
  3. すぐに実行される無名関数ラッパーを追加して、変数定義をグローバルスコープの外に移動します。次に、変数を明示的にエクスポートして、グローバルに再公開する必要がある場合があります。
于 2012-11-28T14:10:01.650 に答える