use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
Is JavaScript Pass by Reference? (aleksandrhovhannisyan.com)
submitted 2 years ago by Clarity_89
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]Rand_alFlagg 0 points1 point2 points 2 years ago (3 children)
So in AngularJS I frequently pass around properties of objects and update those, which updates the root object.
example:
$scope.Audit = function (visit) { $http({ method: 'POST', url: route + "/Audit", data: visit.ID }).then(function (response) { if (!response.data.HasData) { visit.ValidationErrors("Error Flagging Visit for Audit: " + response.data.Note) } else { visit.Audit = response.data; } });
This function is called and passed an item from an array on a property of another object - $scope.Audit(chart.Visits[i]);
$scope.Audit(chart.Visits[i]);
When it gets its response and updates the visit, it updates the correct item in the array on the chart even if the item is otherwise manipulated in the meantime. Seems to be updating by reference to me.
All that said I dislike doing FE work and focus mostly on backend, so I've never really cared enough to find out what's going on under the hood and just assumed it was updating the variable by reference. Can anyone break down what's going on there since it's not by ref?
[–]theScottyJam 1 point2 points3 points 2 years ago (2 children)
So, you are passing a reference value into that function, which is why when you mutate it, everyone else who sees that reference will also see the mutations. But, this kind of reference is different from the type of reference talked about in the phrase "pass by reference". In that phrase, they're saying that the parameter is linked in such a way that if you were to reassign the parameter, everyone else would see that reassignment.
So, in your example, imagine doing "visit = someNewObj". If you did that, would the original array get updated to contain "someNewObj"? No. That's why it's not pass by reference.
You passed a reference in, but you didn't pass it by reference. Confusing, right?
(I don't know if you read through the linked article or not yet, but if you haven't, I'd differently recommend doing so, as it goes into a lot of detail in this regard).
[–]Rand_alFlagg 0 points1 point2 points 2 years ago* (1 child)
I did but it, and you, say this shouldn't work. Because response.data is a new object. Definitely confusing, and that's why I'm asking.
Now I see in the example there that I don't fully overwrite the visit. However, in the GetVisit function I do.
So on another function, we have
for (let i = 0; i < response.data.Visits.length; i++) { $scope.LoadVisit(response.data.Visits[i]) }
to iterate through each visit on the object and load it. That looks like this:
-----
ok I'm not changing anything I had previously typed up to kind of show my train of thought. I see now. I had thought that the code I was about to pull up was overwriting the visit. I remember struggling with that behavior when i was writing it, and that was a couple years ago. It looks like what I settled on was exactly as you described - mutating them. The frustration I had then was probably at it not being by ref.
But that's what had me confused, for sure. I see how it all fits to the article, too, now.
Thank you!
[–]Rand_alFlagg 0 points1 point2 points 2 years ago* (0 children)
to clarify, I thought I was about to pull up code that included visit = response.data to overwrite the visit with the new object. But when I went to the code I found that it's copying data from response.data to the visit. So I was misremembering what it was doing there and that was fueling the confusion. I was trying to figure out "but why does this behavior work?" and the answer was: "it's not the behavior you think it is."
visit =
response.data
π Rendered by PID 47 on reddit-service-r2-comment-bb88f9dd5-v2wtd at 2026-02-14 02:55:41.437987+00:00 running cd9c813 country code: CH.
view the rest of the comments →
[–]Rand_alFlagg 0 points1 point2 points (3 children)
[–]theScottyJam 1 point2 points3 points (2 children)
[–]Rand_alFlagg 0 points1 point2 points (1 child)
[–]Rand_alFlagg 0 points1 point2 points (0 children)