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++那样的真正指针,它允许您将指针传递给变量,然后通过该指针返回以从函数中更改该变量的值.相反,你必须采用其他两种方式之一.对象和数组通过引用传递,因此您可以从函数返回到原始对象.
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 并将结果分配回您的变量。