2016-09-22 113 views
1

我想將一個對象或數組傳遞給一個函數,使其未定義,並在函數執行結束後查看更改。通過完整引用傳遞變量

var arr = ['aaa', 'bbb', 'ccc']; 
var reset = function (param) { 
    param[0] = 'bbb'; 
    param = undefined; 
} 
reset(arr); 

好,所以結果是['bbb', 'bbb', 'ccc'],但我希望它是undefined。是否有可能有效地做到這一點?

+0

定義「有效」。此外,你不能真正銷燬在JavaScript中傳入的對象(數組是對象)。 – vlaz

+0

這是使用純JavaScript的不可能的。但是,您可以在C++中創建本機函數,該函數將刪除引用傳遞給它的對象。它只能在Node.js中工作,它只能用於對象,函數和符號。 – 2016-09-22 22:56:36

回答

5

JavaScript是一種傳值語言,所以修改函數內的功能參數的值不能對作爲參數傳遞的變量的效果。

如果你想要做這樣的事情,你可以有你的函數返回值:

var reset = function(param) { 
    // think think think 
    if (whatever) 
    return undefined; 
    return param; 
}; 

arr = reset(arr); 

現在,如果函數決定做正確的事情是空出來的源變量,它返回undefined

如果你只是想清除變量,但是,沒有必要爲一個功能:

arr = undefined; 
1

您無法在JavaScript中通過引用傳遞變量。你可以做什麼,而不是,如果變量是相同或更大範圍上比reset(),是使用變量本身的函數內部,如下圖所示:

var 
 
    arr = ['aaa', 'bbb', 'ccc'], 
 
    reset = function() { 
 
    arr = undefined; 
 
    } 
 

 
reset(); 
 
console.log(arr);

或者相反,您可以只是使它等於undefined

var arr = ['aaa', 'bbb', 'ccc']; 
 
arr = undefined; 
 
console.log(arr);

+0

您可以在Javascript中通過引用傳遞對象。 https://jsfiddle.net/8cjsd8ye/。或者我錯過了什麼。 – Leeish

+0

@Leeish你錯過了一些東西:)術語「通過引用傳遞」不是關於傳遞對象的引用;這是一個古老的術語,真的早於這個概念。 JavaScript純粹是通過價值傳遞的;只是碰巧對象引用是一種特定的價值。如果你仔細觀察OP,並考慮是否有可能提出問題,你會看到區別。 – Pointy

+0

@Leeish最好你可以調用JS通過引用的副本。但是Pointy是正確的,對象的_value_是「參考副本」。 – vlaz