関数内のグローバル変数の値を変更する方法


131

JavaScriptを使用していて、グローバル変数を作成しています。関数の外で定義し、関数内からグローバル変数値を変更して別の関数から使用したいのですが、どうすればよいですか?

回答:


148

関数内の変数を参照するだけです。魔法はありません。名前を使用してください。グローバルに作成されている場合は、グローバル変数を更新します。

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

そのため、常にで明示的に変数を宣言することがベストプラクティスと見なされていますvar。それを忘れると、誤ってグローバルをいじり始める可能性があるためです。それは間違いを犯しやすいものです。しかし、あなたの場合、これは好転し、あなたの質問に対する簡単な答えになります。


3
これは私にとっては機能しません:country = 'foo' $ .ajax({url: '/ some-endpoint'、success:function(data){country = data.country;}}); console.log(country)// 'foo'を出力
Mark Simpson

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

この場合にconsole.logをより正確にする方法は、ajax成功関数内に置くことです。
DWils、2014年

私の見事な洞察のもう1つ:変数名のスペルと大文字と小文字を再確認します。sessionIdとsessionIDのように単純なものを見逃すのは非常に簡単です。
白ひげ2016

これらについても同じ問題があります。しかし、最終的に理解されました、@ Spudleyに感謝します!
Yudhistira Bayu

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

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

1
この素晴らしいシンプルな例に感謝します。これの論理は私の頭を実行していました。4Dの考え方に慣れる必要がありました。
Mikey3Strings

29

その変数の名前を使用するだけです。

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

ローカル値の名前がグローバル値と同じ名前の場合、windowオブジェクトを使用します

このjsfiddleを参照してください

x = 1;
y = 2;
z = 3;

function a(y) {
  // y is local to the function, because it is a function parameter
  console.log('local y: should be 10:', y); // local y through function parameter
  y = 3; // will only overwrite local y, not 'global' y
  console.log('local y: should be 3:', y); // local y
  // global value could be accessed by referencing through window object
  console.log('global y: should be 2:', window.y) // global y, different from local y ()

  var x; // makes x a local variable
  x = 4; // only overwrites local x
  console.log('local x: should be 4:', x); // local x
  
  z = 5; // overwrites global z, because there is no local z
  console.log('local z: should be 5:', z); // local z, same as global
  console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a

編集する

ES2015 では、さらに2つのキーワードconstとが追加されましたlet。これらも変数のスコープに影響します(言語仕様


1
+1は、グローバル変数とローカルで宣言された変数の間の名前の衝突とそのアクセス方法を説明します。
gdbj 2016年

6
<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>

var関数内でキーワードを使用しないでください。対処する必要はありませんdocument.getElementById("outside").value = x;
ベンオービン'26

5
var a = 10;

myFunction(a);

function myFunction(a){
   window['a'] = 20; // or window.a
}

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

ウィンドウ[「variableNameに」]またはwindow.variableNameあなたは関数内でグローバル変数の値を変更することができます。


これは、角度成分のグローバル変数値を変更できる唯一の方法です!!!
Padmaraj Bhat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.