我现在正在编写一些脚本,在尝试否定函数内部的布尔值时遇到问题。我的意思是:
var test = true;
function changeThisBoolPlease(asd){
asd=!asd;
}
alert(test);
changeThisBoolPlease(test);
alert(test);
警告为真,然后是真的。
有什么想法吗? JS参考不完美吗?
编辑:
好的,这只是我职能的一部分:
function przesun(kolor, figury, castlings, x1, y1, x2, y2, strona) {
kolor = nowaPozycjaKolor(kolor,x1, y1, x2, y2);
figury = nowaPozycjaFigur(figury,x1, y1, x2, y2);
strona = !strona;
}
实际上我无法返回此值。怎么样?
答案 0 :(得分:3)
您只是在问题的示例中更改asd
的值。
试试这个
var test = true;
function changeThisBoolPlease(asd){
return !asd;
}
alert(test);
test = changeThisBoolPlease(test);
alert(test);
或者不推荐,你可以这样做
var test = true;
function changeTestBoolPlease(){
test = !test;
}
alert(test);
changeTestBoolPlease();
alert(test);
答案 1 :(得分:2)
对象不是通过引用传递的,而是通过作为引用的值(引用的副本)传递的......
在您的示例中,您甚至没有传递对象而是传递原始值类型。
如果你想要一个引用,那么你需要将它包装在对象元素中,如:
var test = { val: true };
function changeThisBoolPlease(asd){
asd.val=!asd.val;
}
alert(test.val);
changeThisBoolPlease(test);
alert(test.val);
答案 2 :(得分:1)
这是一个范围问题。只需返回并设置:
var test = true;
function changeThisBoolPlease(asd){
return !asd;
}
alert(test);
test = changeThisBoolPlease(test);
alert(test);