是否有可能从一个单一的功能切换全球布尔值?

时间:2011-12-15 23:55:39

标签: javascript boolean toggle

到目前为止,我正在尝试:

var myBoolean = false; // global

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

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

但显然,它失败了。

编辑:抱歉,我忘了指出我希望该功能可以与许多布尔人合作,而不仅仅是一个

3 个答案:

答案 0 :(得分:5)

是的,您可以从函数切换全局布尔值。您无法在尝试中执行此操作,因为JavaScript严格按值调用。

function toggleBoolean() {
  myBoolean = ! myBoolean;
}

现在,如果您想通过名称切换全局,您可以这样做(虽然它有点icky):

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

全局变量(在浏览器中的JavaScript中)是全局对象的属性,称为“窗口”。在其他情况下,有一些方法可以将名称与全局上下文相关联。因此,您可以调用该函数:

toggleBoolean( "myBoolean" );

请注意,我在那里传递一个字符串,而不是对实际全局变量的引用。

答案 1 :(得分:2)

您是通过值将值传递给函数。相反,为了实现你想要的,你可以做类似的事情:

var myBoolean=false;// Global

function toggleBoolean(){
    myBoolean = !myBoolean;
} 

答案 2 :(得分:1)

你可以做到

var myState = { state : false };

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

alert( myState.state );
toggleBoolean( myState );
alert( myState.state );
默认情况下,

基元在javascript中按值传递。您可以拥有一个包装器对象,并将该对象传递给 toggle 函数。