【问题标题】:Is it possible to toggle a global Booleans from one single function?是否可以从一个函数切换全局布尔值?
【发布时间】:2011-12-15 23:55:39
【问题描述】:

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

var myBoolean = false; // global

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

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

但显然,它失败了。

编辑:抱歉,我忘了指出我希望该函数与许多布尔值一起工作,而不仅仅是一个

【问题讨论】:

    标签: javascript boolean toggle


    【解决方案1】:

    是的,您可以从函数中切换全局布尔值。你不能像你的尝试那样做,因为 JavaScript 是严格按值调用的。

    function toggleBoolean() {
      myBoolean = ! myBoolean;
    }
    

    现在,如果你想通过 name 切换全局,你可以这样做(虽然有点恶心):

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

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

    toggleBoolean( "myBoolean" );
    

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

    【讨论】:

    • 第二个是我要找的。谢谢
    【解决方案2】:

    您正在按值将值传递给函数。相反,要实现您想要的,您可以执行以下操作:

    var myBoolean=false;// Global
    
    function toggleBoolean(){
        myBoolean = !myBoolean;
    } 
    

    【讨论】:

    • 抱歉,我忘了指出我希望该函数可以与许多布尔值一起工作,而不仅仅是一个
    • Pointy 的答案在这种情况下适合您的需求 :)
    【解决方案3】:

    你可以的

    var myState = { state : false };
    
    function toggleBoolean( s )
    {
        s.state = ! s.state;
    }
    
    alert( myState.state );
    toggleBoolean( myState );
    alert( myState.state );
    

    在 javascript 中默认情况下,基元是按值传递的。您可以拥有一个包装对象并将该对象传递给 toggle 函数。

    【讨论】:

    • 抱歉,我忘了指出我希望该函数可以与许多布尔值一起工作,而不仅仅是一个
    • 如果有很多布尔值,您可以将它们全部添加到 myState = { s1 : false , s2 : false }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多