Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JavaScript通过引用传递变量_Php_Javascript_Variables_Reference - Fatal编程技术网

Php JavaScript通过引用传递变量

Php JavaScript通过引用传递变量,php,javascript,variables,reference,Php,Javascript,Variables,Reference,在JavaScript中,PHP的变量引用传递是否有等价物 [PHP]: function addToEnd(&$theRefVar,$str) { $theRefVar.=$str; } $myVar="Hello"; addToEnd($myVar," World!"); print $myVar;//Outputs: Hello World! 函数addToEnd(&$theRefVar,$str) { $theRefVar.=$str; } $myVar=“你好”; addToE

在JavaScript中,PHP的变量引用传递是否有等价物

[PHP]:

function addToEnd(&$theRefVar,$str) { $theRefVar.=$str; } $myVar="Hello"; addToEnd($myVar," World!"); print $myVar;//Outputs: Hello World! 函数addToEnd(&$theRefVar,$str) { $theRefVar.=$str; } $myVar=“你好”; addToEnd($myVar,“世界!”); 打印$myVar//输出:你好,世界! 如果可能,相同的代码在JavaScript中会是什么样子

谢谢大家!

对象作为引用传递

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

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

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

  • 在下面的评论中,提到了一个伟大的例子
  • 应该提到的是,在JavaScript中没有通过引用传递任何内容的真正方法。第一行已从“通过引用”更改为“作为引用”。这种变通方法只不过是你将要达到的程度(即使是全球人有时也会表现得很滑稽)
  • 正如并指出的,应该区分
    foo
    是对对象的引用,而该引用是通过值传递给函数的
以下内容是处理对象属性的另一种方法,以使函数定义更加健壮

   function addToEnd(obj,prop,$str)
   {
      obj[prop] += $str;
   }

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

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

在Javascript中,没有像PHP中那样通过引用传递变量。有一种可能的解决方法来做类似的事情

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

myVar={value:"Hello"};

addToEnd(myVar, " World");   
alert(myVar.value); //Outputs: Hello World!

在本例中,将对象传递给函数,在函数内部修改对象(不是变量,变量仍然指向同一对象)。这就是为什么这不是通过引用传递变量,因为vol7ron的表述不正确。

其他答案/注释对这种情况描述得足够好,但我认为如果您需要这种类型的功能,我会提供一个回调函数

var someText = "asd";
addToEnd(someText, "fgh", function(val) { someText = val; });

但更好的解决办法是

var someText = "asd";
someText = addToEnd(someText, "fgh");

试试这个:

// 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);

不,他们不是。如果是的话,那就已经行了。传递引用的值,这是不同的。这也被称为。这并不是完全错误,原语值是“按值传递的”,对于对象,我会说,引用也是按值传递的。一篇优秀的文章:“引用通过值传递”是正确的。“通过引用传递”不是。你认为它是否“接近”并不重要。它不是通过引用传递的。@Matthew Flaschen:你也要争论他所说的“在JavaScript中”是什么意思吗?通过引用传递的对象是另一回事,C#有它,你可以做“obj=new Object();”(在函数内部),这会改变obj的值(也在函数外部)。在Javascript中,这是行不通的。“你在修改对象(不是变量)”而对象不是变量?这基本上是正确的。该函数变异
obj
的字段,但不执行任何赋值。如果将其分配给
obj
,则不会产生任何有用的效果。@Null该变量仍指向同一对象。它没有改变。@天哪,我只是对你的措辞有点问题。我不反对这一点。我觉得有趣的是,您提供的代码本质上是相同的,但我也从未不同意任何评论。我认为没有必要重复评论中所说的话。我想他们会同意答案。相关:在上一个函数定义中不需要
setValue
参数。我们都去过:)这是一开始让我感到困惑的时候之一,主要是因为它出现在第一个示例中。现在你编辑它好多了。
function addToEnd(original, str)
{
    return original += str;
}
// 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);