Есть ли эквивалент в 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!
Редактировать:
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);