JavaScript は通常、関数スコープに従います。つまり、変数は、宣言されている関数内でのみアクセスできます。
この慣例を破り、変数を関数スコープ外でアクセスできるようにする方法の 1 つは、グローバル ウィンドウ オブジェクトを使用することです。
window.myVar = 123;
私の質問は、関数スコープ外で変数にアクセスできるようにする JavaScript/jQuery の他の方法はありますか?
JavaScript は通常、関数スコープに従います。つまり、変数は、宣言されている関数内でのみアクセスできます。
この慣例を破り、変数を関数スコープ外でアクセスできるようにする方法の 1 つは、グローバル ウィンドウ オブジェクトを使用することです。
window.myVar = 123;
私の質問は、関数スコープ外で変数にアクセスできるようにする JavaScript/jQuery の他の方法はありますか?
変数宣言ではありません。すべての子孫スコープからアクセスできるように、明らかに外側のスコープで変数を宣言できます。
var a; // Available globally
function example() {
a = "hello"; // References a in outer scope
}
厳密モードでない場合は、var
キーワードを削除するだけです。これはあなたの例と同等です:
// a has not been declared in an ancestor scope
function example() {
a = "hello"; // a is now a property of the global object
}
しかし、これは非常に悪い習慣です。関数が厳密モードで実行されると、参照エラーがスローされます。
function example() {
"use strict";
a = "hello"; // ReferenceError: a is not defined
}
あなたが書いたように、変数はそれらが定義された関数内でのみ表示されます(それらがグローバルでない限り)。
できることは、関数オブジェクト自体に変数を割り当てることです。
function foo() {
foo.myVar = 42;
}
console.log(foo.myVar); // outputs "undefined"
foo();
console.log(foo.myVar); // outputs "42"
しかし、私はそれに反対することをお勧めします。このようなことをするのには、本当に十分な理由があるはずです。
それらをグローバルオブジェクトの一部として定義し、後で変数を追加できます
// Define your global object
var myObj = {};
// Add property (variable) to it
myObj.myVar = 'Hello world';
// Add method to it
myObj.myFunctions = function() {
// Do cool stuff
};
以下のリンクを参照してください。
また、varキーワードなしで宣言することもできます。ただし、これはグローバル名前空間を汚染するため、良い方法ではない可能性があります。(厳密モードがオンになっていないことを確認してください)。
編集: 投稿する前に他のコメントを見ませんでした。@JamesAllardiceの答えも良いです。