通过refence javascript传递基元variables

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

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 

这似乎是一个非常hacky解决方法,可能会伤害执行速度。 在其他OO语言中,我们可以将“指针”或“引用”传递给函数。 JS中有这样的东西吗? 谢谢!

你不能在Javascript中通过引用传递基元 – 而“解决方法”的例子不起作用。 原因如下:

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

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

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

第3行递增实际参数值(Number对象引用的一个副本),将其存储在分配给arg内存中,而不是foo 。 如果在调用之后检查foo的原始值,它仍然是2。

实际上,你可以传递一个foo属性的对象的引用:

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

从本质上讲,在ECMA脚本中没有地址指针可用来引用原始值。