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.我不想用多个函数来检查同一件事,但在不同的情况下,在异步环境中,它们通过回调告诉您何时完成,无需进行测试。或者你应该发布你的实际代码;这个抽象版本并没有说明你的问题。不,我认为这是毫无意义的。不管怎样,我想我明白了。谢谢的确刚刚修好了。