Resharper、Javascript:「暗黙的に宣言されたグローバル変数 'X' の使用」質問する

Resharper、Javascript:「暗黙的に宣言されたグローバル変数 'X' の使用」質問する

私は Resharper 6 と ASP.NET Web メソッドを使用していますが、Javascript ファイルに次のような厄介な警告が表示されます。

"Use of implicitly declared global variable 'X'"

その理由は、Web メソッドが次のように JavaScript で作成されるためです。

new X.example().webMethod(arg1, arg2, successCallback, failureCallback);

そして、X...は暗黙的に定義されています。これを明示的に定義する解決策があるかどうか疑問に思っています。これは、ASP.NET Web メソッド フレームワークによって作成された、自動生成された JS ファイルで定義されています。

私の質問は、正当に間違った状況のエラーを排除せずに、この状況のエラーを排除するにはどうすればよいかということです。

ありがとう!

ベストアンサー1

他の JavaScript ファイルで定義されたシンボル (関数、定数、グローバル変数) を使用する場合は、それらを現在のファイルの「スコープ関数」(グローバル名前空間の汚染を防ぐ、通常は匿名のトップレベルの関数) にパラメーターとして渡します。

複数のコンテナ

スクリーンショットからわかるように、ReSharper (6.0.2202.688) はjQuery、現在のファイルのどこにも が定義されていないにもかかわらずContainerAContainerBおよび を正常に処理します。 1 行目のコメントは、JSLint のためだけに存在します (エラーなし)。

この手法では、他のすべてのJavaScriptファイルが、エクスポートされたすべての要素を含む単一のトップレベルオブジェクトを定義することでグローバル名前空間の汚染を最小限に抑えるというJavaScriptのベストプラクティスに従っていることを前提としています(公共) シンボル (つまり、jQueryは jQuery ライブラリとそのプラグインの唯一のグローバル オブジェクトであり、 はContainerALibraryA の唯一のグローバル オブジェクトであり、ContainerBは LibraryB の唯一のグローバル オブジェクトである、など)。

明らかに、グローバル名前空間にコンストラクター関数を生成する ASP.NET Web メソッドを制御できないため、この場合は究極のコンテナーに頼る必要がありますwindow

コンテナとしてのウィンドウ

これは、@sethobrien がコメントで提案した手法の若干のバリエーションです。重要な (私見ですが) 利点は、window.Xコードにハードコーディングしないということです。代わりに、コードはコンテナーからクラスをインスタンス化しますaspNet(現時点では の同義語ですwindowが、将来変更される可能性があります)。また、aspNet.Xコードに を含めることで、将来コードを読む人に対して意図がより明確に宣言されます。最後に、ローカル変数は JavaScript の最小化機能によって短縮され、クライアント ブラウザーに送信されるファイルがわずかに小さくなります。

おすすめ記事