3

ドキュメント ( https://developers.google.com/closure/compiler/docs/api-tutorial3#externs ) によると、外部から関数/変数を使用する場合を含め、外部宣言が存在しない場合、クロージャ コンパイラは変数の名前を変更する必要があるようです。コードのビット。彼らが与える例は

function makeNoteDom(noteTitle, noteContent, noteContainer) {
  // Create DOM structure to represent the note.
  var headerElement = textDiv(noteTitle);
  var contentElement = textDiv(noteContent);
...
}

ここで、textDiv 関数は、何らかのサードパーティ ライブラリによってグローバル スコープで宣言されます。名前の変更を防ぐために、textDiv を外部で宣言する必要があると書かれています。

私の質問は、このコードまたは類似のコードをextern 宣言なしでClosure Compilerに入れると、ドキュメントに示されているように、textDiv の名前が変更されない (コードが壊れる) のはなぜですか?

4

1 に答える 1

2

コンパイラは、未定義関数の呼び出しが実際には外部関数の呼び出しであると想定します。コマンド ライン コンパイラを使用--warning_level VERBOSEして、コンパイラにこの状態をエラーとして処理させることができます。

Web アプリケーションは主にデモ用に構築されており、デフォルトでこれを前提としています。警告レベルを設定できますがVERBOSE、この機能は変更されません。オプションの詳細については、追加の Web サービス オプションページを参照してください。これについてバグレポートを提出しました。

プロパティの名前変更アルゴリズムにより、externs のオブジェクトで同じプロパティ名が宣言されていない場合、宣言されていないプロパティの名前が破壊的な方法で変更されます。

于 2013-02-04T14:36:27.527 に答える