JavaScript通过引用传递变量

时间:2010-10-06 23:40:05

标签: php javascript variables reference

在PHP的参考传递变量中是否存在JavaScript的等价物?

[PHP]:

function addToEnd(&$theRefVar,$str)
{
    $theRefVar.=$str;
}
$myVar="Hello";
addToEnd($myVar," World!");
print $myVar;//Outputs: Hello World!

如果可能,JavaScript中的代码会如何显示?

谢谢!

4 个答案:

答案 0 :(得分:4)

将对象作为引用传递给

   function addToEnd(obj,$str)
   {
      obj.setting += $str;
   }

   var foo = {setting:"Hello"};
   addToEnd(foo , " World!");

   console.log(foo.setting);                    // Outputs: Hello World!

修改:

  • 正如以下评论中所述,CMS提到了一个伟大的article
  • 应该提到的是,没有真正的方法可以在JavaScript中通过引用传递 。第一行已从“按引用”更改为“作为参考”。这种解决方法仅仅与你将要获得的一样接近(有时候全局变得很有趣)。
  • CMSHoLyVieRMatthew指出时,应区分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);