试图使在私有范围内动态更改的变量成为全局变量

Trying to make a variable that is being changed dynamically in a private scope global

我想我的标题是对的,但这就是我想要做的

        $(document).ready(function(){
        var oVars = {};
        var withones;
         etc //didnt work in what of my attempts to declare variables here so didnt cont.
        $('.checkboxes :checkbox').click(function(){
            var $this = $(this);
            if($(this).is(':checked')){


                    oVars[this.id] = true;
                    console.log( oVars)
                }
                if(!$this.is(':checked')){
                    oVars[this.id] = false;
                    console.log( oVars)
                }

在这一点上,我的理解是 oVars 就像

               oVars{
                    withones : true,
                    withoutOnes : false, //if unchecked
                    dispReg :true //if checked
                }

当我选中复选框时,我看到属性值发生了变化

我希望能够(全局)做这样的事情:

               var withOnes = oVars['withones'];
                var withoutOnes = oVars['withoutOnes'];
                etc;

我想在全局范围内声明这些变量,并且我希望它们的值根据 true 或 false 进行更改,因为这是在 if $(this).is(':checked') 中分配的内容以演示哪个被选中。我想这样做的原因是我想创建一个参数是更新值的函数。

});

我会在代码的其他地方编写如下代码

if(withOnes){ // I want withOnes to be true if checked false if unchecked
            process code if true
        }

我试着做了如下的事情。请帮我弄清楚如何更改这些变量值,以便我可以在代码的其他地方使用变量

       if(withones = true){
            console.log("withones checked")
        }
        if(withones = false){
            console.log("withones unchecked")
        }

但每次更改复选框时只显示 "withones checked"。

});

HTML:

        <div>
        <div class="checkboxes">
            <div class="dificulty">
                <label for="withones" class="labelOuter" > 
                    <input type="checkbox" id= "withones" class = "regular-checkbox big-checkbox"><label for="withones"></label> <span class="label">With ones</span>
                </label>
                <label for="withoutOnes" class="labelOuter" > 
                    <input type="checkbox" id = "withoutOnes" class= "regular-checkbox big-checkbox"><label for="withoutOnes"></label><span class="label">Without ones</span>
                </label>
            </div> <!-- dificulty -->

            <div class="view">
                <label for="dispReg" class="labelOuter" > 
                    <input type="checkbox" id = "dispReg" class= "regular-checkbox big-checkbox"><label for="dispReg"></label><span class="label">Display cash register</span>
                </label>
                <label for="hideReg" class="labelOuter" > 
                    <input type="checkbox" id = "hideReg" class= "regular-checkbox big-checkbox"><label for="hideReg"></label><span class="label" title ="gets rid of image">hide cash register</span>
                </label>
                <label for="hideItems" class="labelOuter" > 
                    <input type="checkbox" id = "hideItems" class= "regular-checkbox big-checkbox"><label for="hideItems"></label><span class="label">hide items</span>
                </label>
                <label for="showItems" class="labelOuter" > 
                    <input type="checkbox" id = "showItems" class= "regular-checkbox big-checkbox"><label for="showItems"></label><span class="label">show items</span>
                </label>

              </div> <!-- view -->

        </div>
    </div>
</div>

an updated jsfiddle after reviewing an answer

window-对象可能正是您想要的。

看看那个:

function setTest() {
  window.test = 'hello';
}
setTest();
document.write(test); // gives 'hello'

我不知道其他上下文,但在 Internet 浏览器的上下文中,window-对象及其所有成员随处可用。虽然通过 window 变量访问它们比直接访问它们更优雅。 我想说的是:

不做:

test = 'hello';
alert(test);

改为:

window.test = 'hello';
alert(window.test);

尽管如此,它们实际上是完全相同的意思!(如果没有隐藏的话var test;

但是如果 var test; 在范围内的任何地方被调用,第一个例子将完全改变它的意思。

另一方面,无论您是否添加 var test;,第二个示例都将保持其含义。