JavaScript - 如何/可以从函数中将对象引用设置为null?

Ark*_*kia 9 javascript pointers reference function object

我想知道这是否可能.基本上我有一些对象,我传递给一个函数,在某些条件下,我希望该函数将对象设置为null.

防爆.

var o = {'val' : 0};

f = function(v)
{
   v = null;
};

f(o);   // Would like this to set 'o' to null
Run Code Online (Sandbox Code Playgroud)

不幸的是,我似乎只能将函数的参数设置为null.调用函数'o'后仍然会引用一个对象.

那么,甚至可以这样做吗?如果是这样,怎么样?

jfr*_*d00 10

如果要更改调用owhen 的值,f(o)则有两个选项:

1)您可以f(o)为o返回一个新值,并将其分配给o,如下所示:

var o = {'val' : 0};
o = f(o);
// o == null
Run Code Online (Sandbox Code Playgroud)

在里面f(),你返回一个新值o.

function f(v) {
    if (whatever) {
        return(null);
    }
}
Run Code Online (Sandbox Code Playgroud)

2)将o放入另一个对象并将对该容器对象的引用传递给f().

function f(v) {
    if (whatever) {
        v.o = null;
    }
}

var c = {};
c.o = {'val' : 0};

f(c);
// c.o == null;
Run Code Online (Sandbox Code Playgroud)

javascript语言没有像C/C++那样的真正指针,它允许您将指针传递给变量,然后通过该指针返回以从函数中更改该变量的值.相反,你必须采用其他两种方式之一.对象和数组通过引用传递,因此您可以从函数返回到原始对象.


nnn*_*nnn 5

JavaScript 总是“按值”传递函数参数。这意味着函数无法更改函数外部变量所指向的内容。

但是,当您将对象传递给函数时,传递的“值”是对实际对象的引用,而不是对象的副本。因此,尽管您无法将外部变量设置为 null 或另一个对象,但您可以修改该对象的内容。这意味着你可以做这样的事情:

var containerObj = {'o' : {'val' : 0} };

f = function(v) {
  v.o = null;
};

f(containerObj.o);   // This property would be set to null successfully.
Run Code Online (Sandbox Code Playgroud)

显然,创建一堆容器对象只是为了将它们传递给函数并不是很漂亮,但这是一种方法。

但我建议采用 James Montagne 的建议,让函数返回一个对象或 null 并将结果分配回您的变量。