2012-02-24 65 views
0

可能重复:
JavaScript Pass Variables Through Reference功能(PARAM) - 像PHP

你怎么能做到在JavaScript这样的事情?

在PHP中,你可以把一个&放在参数前面的函数中直接写回变量..你怎么能在javascript中做这样的事情?

+1

其所谓路过全球化志愿服务青年。 – Iznogood 2012-02-24 16:27:03

+0

你不可能。所有对象都作为引用传递,因此您可以修改要传递的对象,但不能修改它存储的位置。 – zzzzBov 2012-02-24 16:27:31

回答

2

在JavaScript中,值按值传递给函数。但是,对象通过引用传递。

传递值:

function myfunction(x) 
{ 
     // x is equal to 4 
     x = 5; 
     // x is now equal to 5 
} 

var x = 4; 
alert(x); // x is equal to 4 
myfunction(x); 
alert(x); // x is still equal to 4 

传递对象:

function myobject() 
{ 
    this.value = 5; 
} 
var o = new myobject(); 
alert(o.value); // o.value = 5 
function objectchanger(fnc) 
{ 
    fnc.value = 6; 
} 
objectchanger(o); 
alert(o.value); // o.value is now equal to 6 

来源:http://snook.ca/archives/javascript/javascript_pass

+1

具体区别在于第一个例子中的'x = 5'行放弃了'x'的原始参数值并用'5'代替。在第二个例子中,'fnc'变量不会以这种方式被替换,所以传入的原始对象将被更新。 – Gareth 2012-02-24 16:55:49

0

如果将一个对象传递给一个函数,它总是被视为传递一个对它的引用。 要对原始值类似的效果,你可以将它们包装在一个对象之前一样

var intVal = { val: 0 }; 

这样,你可以把它传递给函数,仍可以修改实际的变量。