通过完整引用传递变量

问题描述:

我想将一个对象或数组传递给一个函数,使其未定义,并在函数执行结束后查看更改。通过完整引用传递变量

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

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);

+0

您可以在Javascript中通过引用传递对象。 https://jsfiddle.net/8cjsd8ye/。或者我错过了什么。 – Leeish

+0

@Leeish你错过了一些东西:)术语“通过引用传递”不是关于传递对象的引用;这是一个古老的术语,真的早于这个概念。 JavaScript纯粹是通过价值传递的;只是碰巧对象引用是一种特定的价值。如果你仔细观察OP,并考虑是否有可能提出问题,你会看到区别。 – Pointy

+0

@Leeish最好你可以调用JS通过引用的副本。但是Pointy是正确的,对象的_value_是“参考副本”。 – vlaz