6

我现在正在编写一些脚本,但在尝试对函数内部的布尔值求反时遇到了问题。我的意思是:

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;
}

实际上我不能返回这个值。如何?

4

3 回答 3

4

您只是在更改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);
于 2013-12-14T22:34:29.943 回答
2

对象不是通过引用传递,而是通过作为引用(引用的副本)的值传递...

在您的示例中,您甚至没有传递对象,而是传递了原始值类型。

如果你想要一个引用,那么你需要将它包装在对象元素中,例如:

var test = { val: true };

function changeThisBoolPlease(asd){
    asd.val=!asd.val;
}

alert(test.val);
changeThisBoolPlease(test);
alert(test.val);
于 2013-12-14T22:35:10.377 回答
1

这是一个范围界定问题。只需返回并设置:

var test = true;

function changeThisBoolPlease(asd){
    return !asd;
}

alert(test);
test = changeThisBoolPlease(test);
alert(test);
于 2013-12-14T22:35:12.717 回答