我想將一個對象或數組傳遞給一個函數,使其未定義,並在函數執行結束後查看更改。通過完整引用傳遞變量
var arr = ['aaa', 'bbb', 'ccc'];
var reset = function (param) {
param[0] = 'bbb';
param = undefined;
}
reset(arr);
好,所以結果是['bbb', 'bbb', 'ccc']
,但我希望它是undefined
。是否有可能有效地做到這一點?
我想將一個對象或數組傳遞給一個函數,使其未定義,並在函數執行結束後查看更改。通過完整引用傳遞變量
var arr = ['aaa', 'bbb', 'ccc'];
var reset = function (param) {
param[0] = 'bbb';
param = undefined;
}
reset(arr);
好,所以結果是['bbb', 'bbb', 'ccc']
,但我希望它是undefined
。是否有可能有效地做到這一點?
JavaScript是一種傳值語言,所以修改函數內的功能參數的值不能對作爲參數傳遞的變量的效果。
如果你想要做這樣的事情,你可以有你的函數返回值:
var reset = function(param) {
// think think think
if (whatever)
return undefined;
return param;
};
arr = reset(arr);
現在,如果函數決定做正確的事情是空出來的源變量,它返回undefined
。
如果你只是想清除變量,但是,沒有必要爲一個功能:
arr = undefined;
您無法在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);
定義「有效」。此外,你不能真正銷燬在JavaScript中傳入的對象(數組是對象)。 – vlaz
這是使用純JavaScript的不可能的。但是,您可以在C++中創建本機函數,該函數將刪除引用傳遞給它的對象。它只能在Node.js中工作,它只能用於對象,函數和符號。 – 2016-09-22 22:56:36