I'm writing some script now and I have a problem when trying to negate boolean inside a function. I mean this:
var test = true;
function changeThisBoolPlease(asd){
  asd=!asd;
}
alert(test);
  changeThisBoolPlease(test);
alert(test);
alerts true, then true.
Any ideas? Isn't JS reference perfect?
EDIT:
Ok, this was only a part of my function:
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;
}
Actually I cannot return this value. How to?
You are just changing the value of asd in the example in your question. 
try this
var test = true;
function changeThisBoolPlease(asd){
    return !asd;
}
alert(test);
test = changeThisBoolPlease(test);
alert(test);
Alternatively but not recommended, you could do it this way
var test = true;
function changeTestBoolPlease(){
    test = !test;
}
alert(test);
changeTestBoolPlease();
alert(test);
                        Objects are not passed by reference but by value which is a reference (copy of reference)...
In your example you're not even passing an object but a primitive value type.
If you want a reference, then you need to wrap it in object element like:
var test = { val: true };
function changeThisBoolPlease(asd){
    asd.val=!asd.val;
}
alert(test.val);
changeThisBoolPlease(test);
alert(test.val);
                        It's a scoping issue. Just return and set:
var test = true;
function changeThisBoolPlease(asd){
    return !asd;
}
alert(test);
test = changeThisBoolPlease(test);
alert(test);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With