JavaScript通过引用传递参数

JavaScript通过引用传递参数,javascript,Javascript,假设我有这样的代码: var obj1 = {test: false}; function testCondition(condition){ if (!condition){ testCondition(condition); } } testCondition(obj1.test); 上述代码将false作为参数传递给testCondition。如何传递对obj1.test的引用而不是传递其值 编辑 哇,谢谢你的快速回复!!:)但我想补充一点,我不能传递整个对象,因为我

假设我有这样的代码:

var obj1 = {test: false};

function testCondition(condition){
  if (!condition){
    testCondition(condition);
  }
}

testCondition(obj1.test);
上述代码将
false
作为参数传递给
testCondition
。如何传递对obj1.test的引用而不是传递其值

编辑
哇,谢谢你的快速回复!!:)但我想补充一点,我不能传递整个对象,因为我想构建一个泛型函数/方法,它只检查参数并执行onComplete回调或onError回调。上面的代码是我现在所处情况的唯一示例。

返回值有什么问题

或者,您可以将参数包装到对象中:

function foo(arg) {
    var val = arg.val;
    // do something with val
    arg.val = val;
}

var arg = {val:"bar"};
foo(arg);
// do something with arg.val
你不能


而是通过
obj1
,然后检查
条件。在函数内部测试

您不能。JavaScript通过引用传递对象和数组,通过值传递原语(整数、字符串、布尔)。你所要求的是不可能的,除非是糟糕的工作环境:

function ugly(result) {
  result.success = true;
}

var result = {};

ugly(result);

相反,只需返回您的值。这就是JavaScript的工作方式。

传递整个对象而不是其属性:

testCondition(obj1);
然后

if(!passedObj.test){

等等。

从我看来,你有两个选择:

  • 传递对象本身,而不是其成员。然后,您可以访问和修改成员:

    function testCondition(object) {
        if (!object.test) {
            testCondition(object);
        }
    }
    testCondition(obj1)
    
  • 或者,由于要更改单个值,因此可以让函数返回该值:

    function testCondition(condition) {
        if (!condition){
            return testCondition(condition);
        }
    }
    obj1.test = testCondition(obj1.test);
    

  • 仅供参考,如果条件为false,您现在显示的代码将导致无限递归。

    为什么要导致递归堆栈溢出?您需要引用什么?你打算分配给object属性吗?我正在开发JS应用程序,它有许多异步AJAX请求,通过上面的函数,我想测试请求是否完成(许多并行请求,以及各种疯狂的废话),因为D.R.Y.我不想用多个函数来检查同一件事,但在不同的情况下,在异步环境中,它们通过回调告诉您何时完成,无需进行测试。或者你应该发布你的实际代码;这个抽象版本并没有说明你的问题。不,我认为这是毫无意义的。不管怎样,我想我明白了。谢谢的确刚刚修好了。