グローバルオブジェクトを使用することはお勧めできません。また、AMDの背後にある考え方は、グローバルオブジェクトの使用を避けることです。しかし、いくつかのレガシーコードでは、グローバルオブジェクトにいくつかのものを定義する必要があります。現在のコードは次のようになります。requirejsを使用してグローバルオブジェクトにアクセスする
//example2.js
define(function(){
var globalObject = window;
globalObject.x = ...
globalObject.y = ...
});
それはグローバルオブジェクトwindow
をコーディングすることは非常に良い見て、私はそれを除去することが可能であるかどうかを確認するには興味がありませんが、一生懸命働いて。 define()
が使用されなかった場合は、コードはこのように見えた:私は知っている
//example1.js
x = ...
y = ...
、私はあなたがこのコードを嫌い知っているが、のがポイントになりましょう:どのようにグローバル変数をdefine()
内の構造化された方法でアクセスすることができますrequirejsの関数ですか?
//example3.js
define(function(globalObject){
globalObject.x = ...
globalObject.y = ...
});
それとももっと簡単:私はこのようなdefine()
に渡される関数に隠された最後のパラメータのようなものがあったことを望むthis
変数は、その関数内のグローバルオブジェクトを指します。
//example4.js
define(function(){
this.x = ...
this.y = ...
});
注:たとえば私はこの最後のものについてはよく分かりません。 require()
に渡される関数内でthis
変数を調べると、それはwindow
と同じですが、これは私の質問に対する答えになりますが、渡された関数が実行されていることを示す文章を見つけることができませんでした。結局のところ、グローバル変数のコンテキストで実行されているのでしょうか?あなたがstrictモードでない場合は
これは良いアイデアですが、即時呼び出し関数に自分のコードを埋め込む必要のない 'define()'関数の中にメカニズムがあるのかどうか疑問です。 – AlexStack