Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 布尔值不会更改其值_Javascript_Jquery - Fatal编程技术网

Javascript 布尔值不会更改其值

Javascript 布尔值不会更改其值,javascript,jquery,Javascript,Jquery,我被这段代码卡住了,不明白为什么它不能像我期望的那样工作。这样,每次单击#btn,布尔变量“x”的值都会发生变化: $(文档).ready(函数(){ var x=假; $(“#btn”)。单击(函数(){ 切换btn(x); x=!x; }); 功能切换Btn(x){ 如果(!x){ doThis(); }否则{ doThat(); } }; }); 但这样,“x”不会改变它的值: $(文档).ready(函数(){ var x=假; $(“#btn”)。单击(函数(){ 切换btn(x);

我被这段代码卡住了,不明白为什么它不能像我期望的那样工作。这样,每次单击
#btn
,布尔变量“x”的值都会发生变化:

$(文档).ready(函数(){
var x=假;
$(“#btn”)。单击(函数(){
切换btn(x);
x=!x;
});
功能切换Btn(x){
如果(!x){
doThis();
}否则{
doThat();
}
};
});
但这样,“x”不会改变它的值:

$(文档).ready(函数(){
var x=假;
$(“#btn”)。单击(函数(){
切换btn(x);
});
功能切换Btn(x){
如果(!x){
doThis();
}否则{
doThat();
}
x=!x;
};
});
为什么会这样?

因为您有两个
x
变量

其中一项声明如下:

var x = false;
function toggleBtn(x) {
另一项声明如下:

var x = false;
function toggleBtn(x) {
在第一个示例中,您正在更新第一个
x
的值。在第二个示例中,您正在更新第二个
x
的值。然后,当函数结束并被销毁时,它会立即超出范围。

尝试:

$(document).ready(function(){

     var x = false;

    $("#btn").click(function() {
        toggleBtn(x);
    })

    function toggleBtn(x) {
        if (!x)
            doThis();

        else 
            doThat();         
    }

    function doThis() {
        alert("do This");
        x = !x;
    }

    function doThat() {
        alert("do That");
        x = !x;
    }

}) 
最终代码:


好啊
$(文档).ready(函数(){
var x=假;
$(“#btn”)。单击(函数(){
切换btn(x);
})
功能切换Btn(x){
如果(!x)
doThis();
其他的
doThat();
}
函数doThis(){
警惕(“这样做”);
x=!x;
}
函数doThat(){
警惕(“那样做”);
x=!x;
}
})

如果我只有一个按钮,这就可以了。但是如果我有多个按钮执行相同的功能呢?@brigysl,你可以对多个按钮使用
class
,或者对一个按钮使用
id
。我可以更新函数toggleBtn(x){}中第一个x的值吗?@brigysl:我怀疑你可以在此时完全从函数中删除
x
参数,这样,所有引用都将使用范围更大的
x
。但是,如果我为运行相同toggleBtn(x){}的三个不同按钮使用var x、var y和var z,会怎么样?