W JavaScript nie ma opcji „pass by reference”. Możesz przekazać obiekt (co oznacza, że możesz przekazać wartość przez odwołanie do obiektu), a następnie funkcja może zmodyfikować zawartość obiektu:
function alterObject(obj) {
obj.foo = "goodbye";
}
var myObj = { foo: "hello world" };
alterObject(myObj);
alert(myObj.foo); // "goodbye" instead of "hello world"
Możesz iterować właściwości tablicy z indeksem numerycznym i modyfikować każdą komórkę tablicy, jeśli chcesz.
var arr = [1, 2, 3];
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i] + 1;
}
Należy zauważyć, że „podanie przez odniesienie” jest bardzo specyficznym terminem. Nie oznacza to po prostu, że można przekazać odwołanie do modyfikowalnego obiektu. Zamiast tego oznacza to, że możliwe jest przekazanie prostej zmiennej w taki sposób, aby umożliwić funkcji zmodyfikowanie tej wartości w kontekście wywołania . Więc:
function swap(a, b) {
var tmp = a;
a = b;
b = tmp; //assign tmp to b
}
var x = 1, y = 2;
swap(x, y);
alert("x is " + x + ", y is " + y); // "x is 1, y is 2"
W języku takim jak C ++ można to zrobić, ponieważ język ten działa (sortowanie) przechodzący przez odniesienie.
edytuj - to ostatnio (marzec 2015) ponownie wysadziło Reddita na blogu podobnym do mojego wspomnianego poniżej, choć w tym przypadku o Javie. Przyszło mi do głowy, czytając w komentarzach Reddita tam iz powrotem, że duża część zamieszania wynika z niefortunnej kolizji obejmującej słowo „odniesienie”. Terminologia „pass by reference” i „pass by value” poprzedza koncepcję posiadania „obiektów” do pracy w językach programowania. Tak naprawdę wcale nie chodzi o przedmioty; chodzi o parametry funkcji, a konkretnie o to, jak parametry funkcji są „podłączone” (lub nie) do środowiska wywołującego. W szczególności,i wyglądałby dokładnie tak, jak w JavaScript. Jednak można również .móc modyfikować odwołanie do obiektu w środowisku wywołującym, a to jest kluczowa rzecz, której nie można zrobić w JavaScript. Język pass-by-referencyjny nie przekazywałby samego odwołania, ale odniesienie do odwołania
edycja - tutaj jest post na blogu na ten temat. (Zwróć uwagę na komentarz do tego postu, który wyjaśnia, że C ++ tak naprawdę nie ma przekazu referencyjnego. To prawda. C ++ ma jednak możliwość tworzenia odwołań do zmiennych zwykłych, albo jawnie w punkcie funkcji wywołanie w celu utworzenia wskaźnika lub pośrednio podczas wywoływania funkcji, których podpis typu argumentu wymaga, aby to zrobić. Są to kluczowe rzeczy, których JavaScript nie obsługuje).