我们可以传递一个变量的引用,该变量在函数中作为参数不可变吗?
例:
var x = 0;
function a(x)
{
x++;
}
a(x);
alert(x); //Here I want to have 1 instead of 0
Run Code Online (Sandbox Code Playgroud)
Mik*_*sen 131
由于JavaScript不支持通过引用传递参数,因此您需要将变量设为对象:
var x = {Value: 0};
function a(obj)
{
obj.Value++;
}
a(x);
document.write(x.Value); //Here i want to have 1 instead of 0Run Code Online (Sandbox Code Playgroud)
在这种情况下,x是对象的引用.当x被传递给函数a,该引用复制到obj.因此,obj并x在内存中引用相同的东西.改变Value属性obj会影响Value属性x.
Javascript将始终按值传递函数参数.这只是语言的规范.您可以x在两个函数的本地范围内创建,而不是传递变量.
n00*_*dle 19
这个问题可能会有所帮助: 如何在javascript中通过引用传递变量?从ActiveX函数读取数据,返回多个值
总而言之,Javascript基元类型总是按值传递,而对象内部的值通过引用传递(感谢评论者指出我的疏忽).所以为了解决这个问题,你必须将整数放在一个对象中:
var myobj = {x:0};
function a(obj)
{
obj.x++;
}
a(myobj);
alert(myobj.x); // returns 1
Run Code Online (Sandbox Code Playgroud)
Wil*_*ver 13
我发现一种稍微不同的实现指针的方式,从C角度来看可能更通用,更容易理解(因此更适合用户示例的格式).
在JavaScript中,就像在C中一样,数组变量实际上只是指向数组的指针,因此您可以使用数组与声明指针完全相同.这样,尽管您在原始对象中命名了变量,但代码中的所有指针都可以以相同的方式使用.
它还允许一个人使用两个不同的符号,指的是指针的地址和指针地址的内容.
这是一个例子(我用下划线表示一个指针):
var _x = [ 10 ];
function foo(_a){
_a[0] += 10;
}
foo(_x);
console.log(_x[0]);
Run Code Online (Sandbox Code Playgroud)
产量
output: 20
Run Code Online (Sandbox Code Playgroud)
小智 8
你从window对象中引用'x'
var x = 0;
function a(key, ref) {
ref = ref || window; // object reference - default window
ref[key]++;
}
a('x'); // string
alert(x);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101367 次 |
| 最近记录: |