因此,我正在嘗試執行以下操作:在arg中通過引用傳遞類變量
var myVar;
function testFunction(args){
args.cacheVar = new Date();
}
testFunction({cacheVar:myVar});
但是不是改變myVar的值,而是改變args.cacheVar的值。 我想要發生的是myVar = new Date()。不是args.cacheVar。
我該如何用我目前的設置來完成這項工作? (使用參數)
因此,我正在嘗試執行以下操作:在arg中通過引用傳遞類變量
var myVar;
function testFunction(args){
args.cacheVar = new Date();
}
testFunction({cacheVar:myVar});
但是不是改變myVar的值,而是改變args.cacheVar的值。 我想要發生的是myVar = new Date()。不是args.cacheVar。
我該如何用我目前的設置來完成這項工作? (使用參數)
您沒有將myVar
傳遞給您的函數。你正在傳遞一個對象。該對象可能會更新,但由於您在任何地方都沒有引用,所以沒有任何反應。
在傳遞它之前,您需要將對象保存爲變量。
var myVar = {cacheVar:null};
function testFunction(args){
args.cacheVar = new Date();
}
testFunction(myVar);
你傳遞給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();
第一種方式,但是,是不是很安全(隱含的全局),所以要麼直接返回所需的值的變量你想改變(第二版本),使用閉包或將所有東西變成一個對象,但是現在可能會讓我們太過分了。
你的意思是將對象的'cacheVar'屬性從'myVar'改爲'new日期()'?或者你的意思是改變變量'myVar'的值並給它'new Date()'?爲什麼它必須通過'arguments'? – Joseph