I came across this exercise, and just wanted to get other peoples thoughts on it. It’s specifically in relation to the Laurel and Hardy exercise. The variable assignment puzzle looks like a loop but seems to be teaching you something about assignment convention/method.
I wouldn’t mind checking if my understanding of the concept is correct so if anyone can help me that would be great.
let name1 = 'Olga';
let name2 = name1;
name1 = 'Clara';
console.log(name2)
Result:
Olga
Eventhough you declared name1 = Clara in line3.
In some other languages … the result would be:
Clara
Related problems regarding this topic/issue can come up time after time.
As mentioned in my first post it is related to how a certain programming languages stores/references to Information in the memory
Keyword: “Pointer/Memory Pointer” - Does name2 reference to the block in the memory in which name1 is saved or does it copy the value during the declaration and so generates a new entry in the memory.
Keyword: “Pointer/Memory Pointer” - Does name2 reference to the block in the memory in which name1 is saved or does it copy the value during the declaration and so generates a new entry in the memory.
My understanding was this…
Understanding before
When variable a is assigned the value of variable b. The value of variable a will equal the value of variable b at the point of distribution. When b shares it’s properties with a, A’s properties will not change even if b’s properties do.
This seemed to work for the js-hero example.
But in the article it mentions
assign-by-value or assign-by-reference
Firstly, the variable batman is initialized and when the variable superman is assigned with the value stored in the variable batman , it creates a new copy of the value and stores it. When the variable superman is modified, variable batman is left unaffected as they point to distinct values.
Understanding now
When variable a is assigned the value of variable b. The value of variable a will equal the copy of variable b. A’s properties will not change even if b’s properties do, because A took a copy of B’s properties which are seperate from the present B properties.
Except for this doesn’t apply to objects or arrays, where referencing DOES take place and therefore no copies are created. With every change of the object or array, any variables that have been assigned to said objects/arrays will also be changed.
So, when you reassign a variable, it copies the value. Always. That’s how that part of JS works.
If you have an object, the thing the variable points to is the reference: it’s not the whole thing you write in the code, it’s just a value that says “this is an object and it has these properties and these properties are stored somewhere”. So if you reassign it, it still copies it. It is just a value, and it still gets copied in exactly the same way as a number or a string.
But the contents of the object aren’t stored in the same place. If you copy the reference to that object, it will still point at the same contents. If you wanted copies of the contents you would need to copy the contents individually as well, they are seperate things.
It’s a sense it’s like a physical bag. It’s still the same bag regardless of what items you put into it, it doesn’t change into a new bag every time you put something into it or take something out. The contents are seperate things to the bag itself. (Edit: this analogy is really bad in context now I think about it. Sorry! It’s like a bag that can be cloned, but if you clone it the contents don’t clone, they’re the same exact contents, and that doesn’t really make sense )
I think the “assign by reference” is called a “pointer” in languages like C++. As in: it’s just pointing toward the memory-adress where the actual object is saved.
Ofcourse if you copy the pointer, you just have another pointer.
Kinda like the table-of-content of a book: if you copy that, you don’t have another book, you just have another table-of-content. Because it’s only pointing toward the place in the book, where the actual content is.