2011-12-15 5 views
2

これまでのところ私がしようとしています:グローバルなブーリアンを1つの関数から切り替えることはできますか?

var myBoolean = false; // global 

function toggleBoolean(vr) { 
    vr = !vr; 
} 

alert(myBoolean); // false 
toggleBoolean(myBoolean); 
alert(myBoolean); // false 

しかし、明らかに、それは失敗しました。

編集:申し訳ありませんが、私は機能が多くのブール値で動作するようにしたいことを指摘するのを忘れだけではなく、1

答えて

5

はい、あなたは関数からグローバルブール値を切り替えることができます。 JavaScriptは厳密に価値のある呼び出しであるため、あなたの試行のようにすることはできません。

function toggleBoolean() { 
    myBoolean = ! myBoolean; 
} 

あなたは名前でグローバルを切り替えたい場合(それは少し不快ですが)さて、あなたはこれを行うことができます:

function toggleBoolean(name) { 
    window[ name ] = ! window[ name ]; 
} 

グローバル変数(ブラウザ上のJavaScriptで)されています"ウィンドウ"として知られているグローバルオブジェクトのプロパティ。他のコンテキストでは、名前をグローバルコンテキストに関連付ける方法があります。したがって、次のように関数を呼び出すとします。

toggleBoolean("myBoolean"); 

実際のグローバル変数への参照ではなく、文字列を渡します。

+0

2番目は私が探しているものです。お返事ありがとうございます –

2

値を関数に渡しています。あなたは

var myState = { state : false }; 

function toggleBoolean(s) 
{ 
    s.state = ! s.state; 
} 

alert(myState.state); 
toggleBoolean(myState); 
alert(myState.state); 

プリミティブはJavaScriptにデフォルトで値によって渡されます行うことができます

var myBoolean=false;// Global 

function toggleBoolean(){ 
    myBoolean = !myBoolean; 
} 
+0

申し訳ありませんが、私は多くのブーリアンだけではなく多くのブーリアンと共に働くことを指摘するのを忘れました –

+0

その場合のPointyの答えはあなたのニーズに合っています:) – Akhil

1

:代わりに、あなたが望むものを達成するために、次のような何かを行うことができます。ラッパーオブジェクトを持ち、オブジェクトをのトグル関数に渡すことができます。

+0

申し訳ありませんが、 –

+0

ブール値が多い場合は、それらをすべてmyState = {s1:false、s2:false} 'などに追加できます –

関連する問題