Переменные JavaScript Pass через ссылку

Есть ли эквивалент в JavaScript для ссылочной передачи переменных PHP?

[PHP]:

  функция addToEnd (& $ theRefVar, $ str)
 {
     $ TheRefVar = $ ул.
 }
 $ MYVAR = "Hello";
 addToEnd ($ myVar, «Мир!»);
 print $ myVar; // Вывод: Hello World! 

Как будет выглядеть тот же код в JavaScript, если это возможно?

Спасибо!

Объекты передаются как ссылки.

function addToEnd(obj,$str) { obj.setting += $str; } var foo = {setting:"Hello"}; addToEnd(foo , " World!"); console.log(foo.setting); // Outputs: Hello World! 

Редактировать:

  • Как указано в комментариях ниже, CMS упомянул о большой статье .
  • Следует отметить, что нет истинного способа передать что-либо по ссылке в JavaScript. Первая строка была изменена с «по ссылке» на «как ссылка». Это обходное решение просто так близко, как вы собираетесь получить (даже глобальные действия иногда смешные).
  • Как отмечают CMS , HoLyVieR и Matthew , следует сделать различие в том, что 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; }); 

а также

 function addToEnd(original, str, setValue) { setValue(original += str); } 

но лучшим решением будет

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

а также

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