通过refence javascript传递原始变量

时间:2016-09-19 21:56:39

标签: javascript node.js function reference

我试图通过引用传递原始变量。

var foo = 2;
function inc (arg) {
    arg++
}
inc(foo) //won't increment foo

上述方法不起作用,因为在JavaScript中,基元(如数字)按值传递,而对象通过引用传递。为了通过引用传递基元,我们需要将它们声明为对象:

var foo = new Number(2)
function inc (arg) {
    arg++
}
inc(foo) //increments foo

这似乎是一个非常糟糕的解决方法,可能会伤害执行速度。在其他OO语言中,我们可以通过"指针"或"参考"功能。 JS中有这样的东西吗?谢谢!

1 个答案:

答案 0 :(得分:8)

您无法通过Javascript中的引用传递基元 - 并且示例“解决方法”不起作用。原因如下:

var foo = new Number(2)  // line 1
function inc (arg) {     // line 2
    arg++                // line 3
}

第1行将foo设置为具有原始值2的Number对象包装器。

第2行定义了一个形式参数arg,它在函数范围内有自己的存储位置来保存参数值的副本。

第3行增加存储它的实际参数值(Number对象引用的副本) - 分配给arg的memmory,而不是foo。如果您在通话后检查foo的原始值,它仍为2.

实际上,您可以使用递增的foo属性传递对象的引用:

var obj = {}
obj.foo = 2
function incFoo (obj) {
    obj.foo++
}
incFoo()  // obj.foo now 3

基本上,ECMA脚本中没有可用于引用原始值的地址指针。