到目前为止,我正在尝试:
var myBoolean = false; // global
function toggleBoolean(vr) {
vr = !vr;
}
alert(myBoolean); // false
toggleBoolean(myBoolean);
alert(myBoolean); // false
但显然,它失败了。
编辑:抱歉,我忘了指出我希望该功能可以与许多布尔人合作,而不仅仅是一个
答案 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 函数。