qxu*_*u21 6 javascript reference function node.js
我试图通过引用传递原始变量.
var foo = 2;
function inc (arg) {
arg++
}
inc(foo) //won't increment foo
Run Code Online (Sandbox Code Playgroud)
上述方法不起作用,因为在JavaScript中,基元(如数字)通过值传递,而对象通过引用传递.为了通过引用传递基元,我们需要将它们声明为对象:
var foo = new Number(2)
function inc (arg) {
arg++
}
inc(foo) //increments foo
Run Code Online (Sandbox Code Playgroud)
这似乎是一个非常hacky的解决方法,可能会伤害执行速度.在其他OO语言中,我们可以将"指针"或"引用"传递给函数.JS中有这样的东西吗?谢谢!
您无法通过Javascript中的引用传递基元 - 并且示例"解决方法"不起作用.原因如下:
var foo = new Number(2) // line 1
function inc (arg) { // line 2
arg++ // line 3
}
Run Code Online (Sandbox Code Playgroud)
第1行设置foo为具有原始值2的Number对象包装器.
第2行定义了一个形式参数arg,它在函数范围内有自己的存储位置来保存参数值的副本.
第3行增加存储它的实际参数值(Number对象引用的副本) - 在分配的memmory中arg,而不是foo.如果检查foo调用后的原始值,它仍然是2.
实际上,您可以使用递增的foo属性传递对象的引用:
var obj = {}
obj.foo = 2
function incFoo (obj) {
obj.foo++
}
incFoo() // obj.foo now 3
Run Code Online (Sandbox Code Playgroud)
实质上,ECMA脚本中没有可用于引用原始值的地址指针.
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |