所以我试着做以下事情;
var myVar;
function testFunction(args){
args.cacheVar = new Date();
}
testFunction({cacheVar:myVar});
但不是改变myVar的值,而是改变args.cacheVar的值。 我想要发生的是myVar = new Date()。不是args.cacheVar。
如何使用我当前的设置完成此操作? (使用参数)
答案 0 :(得分:1)
您正在传递对testFunction
的引用,但它是对您动态创建的对象文字的引用:testFunction({cacheVar:myVar});
< - {}
是引用的对象。它永远不会分配给任何变量,因此只要testFunction
返回就会进行GC。
cacheVar
属性被指定为 myVar
的值的副本< / em>(在这种情况下未定义)。您必须记住,只有对象通过引用传递typeof something
将返回object
数组,对象文字,自定义对象,函数......但可以返回undefined
,string
,boolean
和number
都是原始的。 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);