在PHP的参考传递变量中是否存在JavaScript的等价物?
[PHP]:
function addToEnd(&$theRefVar,$str) { $theRefVar.=$str; } $myVar="Hello"; addToEnd($myVar," World!"); print $myVar;//Outputs: Hello World!
如果可能,JavaScript中的代码会如何显示?
谢谢!
答案 0 :(得分:4)
将对象作为引用传递给。
function addToEnd(obj,$str)
{
obj.setting += $str;
}
var foo = {setting:"Hello"};
addToEnd(foo , " World!");
console.log(foo.setting); // Outputs: Hello World!
修改:
foo
是对象的引用,并且该引用由值到函数。以下内容作为处理对象属性的另一种方式,使您的函数定义更加健壮。
function addToEnd(obj,prop,$str)
{
obj[prop] += $str;
}
var foo = {setting:"Hello"};
addToEnd(foo , 'setting' , " World!");
console.log(foo.setting); // Outputs: Hello World!
答案 1 :(得分:2)
在Javascript中,没有像PHP那样通过引用传递变量。有一种可行的解决方法可以做类似的事情。
function addToEnd(obj, str)
{
obj.value += str;
}
myVar={value:"Hello"};
addToEnd(myVar, " World");
alert(myVar.value); //Outputs: Hello World!
在这个例子中,发生的是你将一个对象传递给函数及其内部,你正在修改对象(而不是变量,变量是仍然指向同一个对象)。这就是为什么这不是通过参考传递变量而vol7ron错误陈述的原因。
答案 2 :(得分:1)
其他答案/评论很好地描述了这种情况,但是如果您需要样式的功能,我认为我会提供和替代。使用回调。
var someText = "asd";
addToEnd(someText, "fgh", function(val) { someText = val; });
和
function addToEnd(original, str, setValue)
{
setValue(original += str);
}
但更好的解决方案是
var someText = "asd";
someText = addToEnd(someText, "fgh");
和
function addToEnd(original, str)
{
return original += str;
}
答案 3 :(得分:0)
试试这个:
// function
function func(param,callback){
if(param){
if(typeof callback=='function') {
callback.call(this,param);
}
return true;
}
return false;
}
// calling function
var variable=0;
returnValue=func(10,function(reference){variable=reference});
alert(returnValue+'/'+variable);