JavaScript通过引用传递参数

时间:2013-07-17 13:31:44

标签: javascript

让我说我有这样的代码:

var obj1 = {test: false};

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

testCondition(obj1.test);

上面的代码会将false作为参数传递给testCondition。如何传递对obj1.test的引用而不是传递它的值?

修改 哇,谢谢快速回复!! :)但我想补充一点,我无法传递整个对象,因为我想构建一个通用函数/方法,只需检查参数并执行onComplete回调或onError回调。上面的代码只是我现在的情况的一个例子。

5 个答案:

答案 0 :(得分:4)

我可以从中看到两个选择:

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

    function testCondition(object) {
        if (!object.test) {
            testCondition(object);
        }
    }
    testCondition(obj1)
    
  2. 或者,由于您正在更改单个值,因此您可以通过该函数返回该值:

    function testCondition(condition) {
        if (!condition){
            return testCondition(condition);
        }
    }
    obj1.test = testCondition(obj1.test);
    
  3. 仅供参考,如果条件为假,您现在显示的代码将导致无限递归。

答案 1 :(得分:1)

返回值有什么问题?

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

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

答案 2 :(得分:0)

你不能。

改为通过obj1,然后检查函数内的condition.test

答案 3 :(得分:0)

你做不到。 JavaScript通过引用,基元(整数,字符串,布尔值)按值传递对象和数组。除了糟糕的解决方法之外,你所要求的是不可能的:

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

var result = {};

ugly(result);

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

答案 4 :(得分:0)

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

testCondition(obj1);

然后

if(!passedObj.test){

等...