0

所以我正在尝试执行以下操作;

var myVar;  

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

testFunction({cacheVar:myVar});

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

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

4

2 回答 2

1

您传递的是对testFunction所有的引用,但它是对您动态创建的对象文字的引用:testFunction({cacheVar:myVar});<--{}是被引用的对象。它从来没有分配给任何变量,所以它一testFunction返回就被 GC'ed。
cacheVar属性被分配了的值的副本myVar(在这种情况下未定义)。您必须记住,只有通过引用传递的对象typeof something才会返回object数组、对象字面量、自定义对象、函数......但可以返回undefined, string,boolean并且number它们都是原语。null是证明此规则顺便说一句的例外(object由于历史原因它返回)。

如果要更改 的值myVar,只需使用myVar

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

然而,第一种方法不是很安全(隐含的全局变量),所以要么将所需的值直接返回给你想要更改的变量(第二个版本),要么使用闭包,要么将所有东西都变成一个对象,但这可能只需要我们现在太远了

于 2012-10-31T15:44:00.680 回答
0

你没有传递myVar给你的函数。您正在传递一个对象。该对象可能会更新,但由于您在任何地方都没有对它的引用,所以什么也没有发生。

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

var myVar = {cacheVar:null}; 

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

testFunction(myVar);
于 2012-10-31T15:42:57.967 回答