When i started learning function in C++ its all around pass by value and reference. Is there something similar we have in javascript ?
If yes/not how it works in case of javascript?
Thanks all.
When i started learning function in C++ its all around pass by value and reference. Is there something similar we have in javascript ?
If yes/not how it works in case of javascript?
Thanks all.
A good post explaining pass by reference vs. pass by value in JavaScript.
Essentially: primitives are passed by value, objects are passed by reference.
JavaScript is always pass by value, never pass by reference. A lot of people confuse this because of the way objects work.
There is no "pass by reference" for any variable in JavaScript (no, not even if an object is assigned to that variable). All variables and arguments are assigned by value. If the assigned value is an object, then the value of the new variable is a reference to that object, but assigning a new value/object to the new variable will not affect the original variable.
A comparison - PHP
$foo = "foo";
$bar = &$foo; // pass by reference
$bar = "bar";
echo $foo; // -> output: "foo"
JavaScript
foo = {"foo": true};
bar = foo;
bar = {"bar": true};
alert(JSON.stringify(foo)); // -> output: '{"foo": true}
Other answers to this question are correct - all variables are passed by value in JavaScript, and sometimes that value points to an object.
When a programming language supports passing by reference, it's possible to change where the variable points from inside a function. This is never possible in JavaScript.
For example, consider this code which attempts to reassign the passed variable to a new value:
function changeCaller( x ) {
x = "bar"; // Ha ha!
}
function testChangeCaller() {
var x = "foo";
changeCaller(x);
alert(x); // still "foo"
}
testChangeCaller();
Attempts to point variables at new objects fails in the same way the above example fails to reassign a primitive string:
function changeCaller( x ) {
x = new Object(); // no longer pointing to the same object
x.a = "bar";
}
function testChangeCaller() {
var x = new Object();
x.a = "foo";
changeCaller(x);
alert(x.a); // still "foo"
}
testChangeCaller();
The feature which leads people to believe they're dealing with a pass-by-reference scenario is when modifying objects. You can make changes to an object or array, because the local variable points to the same object:
function changeCaller( x ) {
x.a = "bar";
}
function testChangeCaller() {
var x = new Object();
x.a = "foo";
changeCaller(x);
alert(x.a); // now "bar", since changeCaller worked on the same object
}
testChangeCaller();
Hope this helps!