通过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脚本中没有地址指针可用来引用原始值。