2012-06-03 35 views

答えて

104

ちょうど関数内の変数を参照くださいwindowオブジェクトを使用します。魔法はありません、ただそれの名前を使用してください。グローバルに作成されている場合は、グローバル変数を更新します。

varをローカルで宣言することでこの動作を無効にできますが、varを使用しない場合、その変数がグローバルに宣言されている場合、関数で使用される変数名はグローバルになります。

これは、変数を常にvarで明示的に宣言することをお勧めします。あなたがそれを忘れてしまうと、偶然にもグローバルで混乱することになります。それは簡単な間違いです。しかし、あなたのケースでは、これは回り、あなたの質問に対する簡単な答えになります。

+1

この私のために動作しません: 国= 'foo' で $アヤックス({ URL: '/いくつかのエンドポイント'、 成功:機能(データ){ 国= data.country;} }); console.log(国)//出力 'foo' –

+28

@ MarkSimpson - あなたの例では、 'console.log'がすぐに実行されますが、ajaxの成功関数はある時点でのみ実行されるため後でajax呼び出しが実際に応答を返すときに発生します。これは、ajaxの非同期性に関する基本的な点です。クロージャー関数のコードは、そのコードの周りを順番に実行されません。これは、イベント駆動型コードについて学ぶときに把握することが重要です。 – Spudley

+0

説明をありがとう@Spudley –

39
var a = 10; 

myFunction(); 

function myFunction(){ 
    a = 20; 
} 

alert("Value of 'a' outside the function " + a); //outputs 20 
+0

この素晴らしい単純な例のおかげです。これの論理は私の頭の中でやっていた。ちょうど4dの思考に慣れなければならない。 – Mikey3Strings

18

その変数の名前を使用してください。

JavaScriptでは、変数は、関数のパラメータである場合、または変数の名前の前にvarキーワードを入力して明示的にローカルとして宣言した場合、関数のローカルにのみあります。

ローカル値の名前は、グローバル値と同じ名前を持つ場合は、

このjsfiddle

x = 1; 
y = 2; 
function a(y) { 
    // y is local to the function, because it is a function parameter 
    alert(y); // 10 
    y = 3; // will only overwrite local y, not 'global' y 
    var x; // makes x a local variable 
    x = 4; // only overwrites local x 
    alert(y); // 3 
    alert(x); // 4 
    // global value could be accessed by referencing through window object 
    alert(window.y) // 2 global y 
} 
a(10); 
alert(x); // 1; this is the global value 
alert(y); // 2; global as well 
+1

グローバル変数とローカル宣言された変数の間の名前の衝突とそのアクセス方法を記述する+1。 – gdbj

5
<script> 
var x = 2; //X is global and value is 2. 

function myFunction() 
{ 
x = 7; //x is local variable and value is 7. 

} 

myFunction(); 

alert(x); //x is gobal variable and the value is 7 
</script> 
+0

関数内で 'var'キーワードを使用しないでください。' document.getElementById( "outside")を扱う必要はありません。value = x; ' –

関連する問題