ファイル変数MYGLOBALS
は、あなたのスコープ機能(名前のない大一番外側の関数)に対してローカルであるので、それだけでその関数内からアクセスすることができます。
"... html javascriptタグで..."とはどういう意味かわかりませんが、引用したalert
がその有効範囲の外にある場合はMYGLOBALS
が範囲外です。
更新:JavaScriptのスコープについての事は、それは人々がそれだと思うよりも、はるかに簡単だということです。 var
で宣言された変数は、スコープ(関数またはグローバル; JavaScriptにはブロックレベルのスコープがないため、{}
で定義されていません)とそのスコープのサブスコープ(例:それの中で定義する)。スコープは完全に字句 —です。つまり、ソースコードに表示されているものであり、他の実行時構造ではありません。明示的にtestQuery
というプロパティをwindow
にしてグローバル変数を明示的にするwindow.testQuery = testQuery;
行のように、明示的にどこかでコードが表示されない限り、そのスコープからポップアウトすることはありません。 (そしてその後も、それは変数は、あなたがより広くアクセス可能である同じ事を参照新しいプロパティを作成しただけのことを、スコープの外にポップされたことはありません。)
更新2:あなたのコメントを再
実は私は何をしようとしていますが、あなたがに置くことができ、最終的な静的な整数が存在するであろう他の言語でのプログラミングをしている時に見るもののようなものを作成することですあなたが呼び出した関数のパラメータフィールド。それを行う良い方法はありますか?たとえば、ビジュアルベーシックでは、me.background = Color.YELLOWのようなものです。私が望むのは、その黄色を表す静的変数を持つことです。
JavaScriptにはユーザー定義の定数はなく、列挙型はありません。 (更新:それらのものの両方がES6で変更されることがあります。)あなたが代わりに行うことは例えば、プロパティを持つオブジェクトを定義している:
var COLORS = {
RED: "#FF0000",
BLUE: "#0000FF",
// ...
GREEN: "#00FF00"
};
は、これらのは定数ではありませんから、誰を保つために何もありませんあなたがあなたに言っていることを除いてCOLORS.RED
に割り当ててください。
(更新:ES5では、我々はこのように、Object.defineProperties
を使用してこれらのプロパティを一定にすることができます。あなたは、デフォルトでは、それは書き込み可能ではない方法で、プロパティを定義するとき
var COLORS = Object.defineProperties({}, {
RED: {value: "#FF0000"},
BLUE: {value: "#0000FF"},
// ...
GREEN: {value: "#00FF00"}
});
)
あなたがしていることは、値がオブジェクトである単一のグローバルシンボルを持つモジュールパターンと、それ以外のオブジェクトはそのオブジェクトのプロパティです:
(function() {
var mod;
// Create the global, and also give ourselves a convenient alias for it (`mod`)
window.MyModule = mod = {};
// Colors
mod.COLORS = {
RED: "#FF0000",
BLUE: "#0000FF",
// ...
GREEN: "#00FF00"
};
mod.testQuery = MyModule_testQuery;
function MyModule_testQuery() {
// Do something
}
})();
alert(MyModule.COLORS.RED); // #FF0000
MyModule.testQuery(); // Do something
それともtestQuery
機能は次のように定義することができることを、あなたが好む場合:
mod.testQuery = function() {
// Do something
};
...しかし、その関数が匿名である、と私はnot a fan of anonymous functionsです。 (名前MyModule_testQuery
について特別何もない、それは純粋に私の命名規則だということに注意してください。)
やや話題オフ:私たちは上記のグローバルシンボルを公開している。このラインについて
:
// Create the global, and also give ourselves a convenient alias for it (`mod`)
window.MyModule = mod = {};
これは、ブラウザ環境に固有のことです。私たちは、些細な変更で任意のJavaScript環境には適用作ることができます:
// Create the global, and also give ourselves a convenient alias for it (`mod`)
this.MyModule = mod = {};
我々は、最も外側のスコープの関数を呼び出すものだから働き、そして私たちは、我々は、特定のでそれを呼び出していないことを知っていますthis
値(いくつかの他の言語 —とは異なりthis
のJavaScript で—は、関数が呼び出された方法によって完全にを決定し、ではないどこか、それが定義されていますか)。したがって、特別な値を使用していないことがわかっているので、JavaScriptが動作するため、グローバルオブジェクトになります。グローバルオブジェクトは、Webブラウザ上のwindow
です(実質的には、window
は、それ自体を参照するグローバルオブジェクトのプロパティです)。
あなたは間違いがあると思いますか?どのようなエラー出力/動作が得られていますか、何を期待しましたか? –
@Andrzej Doyle私は、コードから理解できるものから 'bar'を返すポップアップボックスを期待しています。しかし、それは私が理解するものに応答していないようです。 –
誤解を招くほど(と一貫性のない)字下げであったかもしれないと理解している問題の一部です。私はインデントをより標準的にするように更新しました。これは助けになるかもしれません。 **編集**:そして今私はもう一度やった(あなたの編集はそれを拭き取った)。 –