0

JavaScript は通常、関数スコープに従います。つまり、変数は、宣言されている関数内でのみアクセスできます。

この慣例を破り、変数を関数スコープ外でアクセスできるようにする方法の 1 つは、グローバル ウィンドウ オブジェクトを使用することです。

window.myVar = 123;

私の質問は、関数スコープ外で変数にアクセスできるようにする JavaScript/jQuery の他の方法はありますか?

4

3 に答える 3

6

変数宣言ではありません。すべての子孫スコープからアクセスできるように、明らかに外側のスコープで変数を宣言できます。

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
}
于 2013-07-25T07:36:31.363 に答える
0

あなたが書いたように、変数はそれらが定義された関数内でのみ表示されます(それらがグローバルでない限り)。

できることは、関数オブジェクト自体に変数を割り当てることです。

function foo() {
    foo.myVar = 42;
}

console.log(foo.myVar); // outputs "undefined"
foo();
console.log(foo.myVar); // outputs "42"

しかし、私はそれに反対することをお勧めします。このようなことをするのには、本当に十分な理由があるはずです。

于 2013-07-25T07:39:03.177 に答える
0

それらをグローバルオブジェクトの一部として定義し、後で変数を追加できます

// 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の答えも良いです。

于 2013-07-25T07:45:26.227 に答える