在arg中通过引用传递类变量

时间:2012-10-31 15:38:15

标签: javascript

所以我试着做以下事情;

var myVar;  

function testFunction(args){  
args.cacheVar = new Date();  
}  

testFunction({cacheVar:myVar});

但不是改变myVar的值,而是改变args.cacheVar的值。 我想要发生的是myVar = new Date()。不是args.cacheVar。

如何使用我当前的设置完成此操作? (使用参数)

2 个答案:

答案 0 :(得分:1)

您正在传递对testFunction的引用,但它是对您动态创建的对象文字的引用:testFunction({cacheVar:myVar});< - {}是引用的对象。它永远不会分配给任何变量,因此只要testFunction返回就会进行GC。
cacheVar属性被指定为 myVar的值的副本< / em>(在这种情况下未定义)。您必须记住,只有对象通过引用传递typeof something将返回object数组,对象文字,自定义对象,函数......但可以返回undefinedstringbooleannumber都是原始的。 null是证明此规则BTW的例外(由于历史原因,它返回object。)

如果您想更改myVar的值,请使用myVar

function testFunction()
{
    myVar = new Date();
}
//alternative:
function testFunction()
{
    return new Date();
}
var myVar = testFunction();

然而,第一种方式并不是非常安全(暗示全局变量),所以要么将所需的值直接返回到您想要更改的变量(第二个版本),请使用闭包或将所有内容都转换为对象,但是可能只是把我们带到现在太远了

答案 1 :(得分:0)

您没有将myVar传递给您的函数。你正在传递一个物体。该对象可能会更新,但由于您在任何地方都没有引用它,所以没有任何反应。

您需要在传递对象之前将其保存为变量。

var myVar = {cacheVar:null}; 

function testFunction(args){  
    args.cacheVar = new Date();  
}  

testFunction(myVar);