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,会怎么样?