Today I answered a question about Javascript, which involved assignment issues, so I wanted to summarize this question well.
After executing the above code, will the values of variables a and b change?
Original and reference values
In the previous article, we introduced original values and reference values. Original values refer to Undefined, Null, Boolean, Number, String, etc. They are stored in the stack, while reference values are integrated from Object and are stored in the heap. middle.
Here we need to clearly distinguish between the two:
For the above four variables, a and A are original values, while b and B are reference values.
Assignment mechanism
After knowing the difference between original value and reference value, we can introduce the assignment mechanism of Javascript in detail:
In Javascript, for variables of primitive value types, each assignment will generate a copy, while for reference values, as the name suggests, assignment by reference points to the memory of the same storage object.
Assignment of original values:
Assignment of reference values:
Parameter passing
Now let’s take a look at how to handle passing two types of values to function parameters.
1. Pass the original value
The output is 1, so we know that the function only passes the value of the variable in, so m in the function body gets the passed value 1, and then is assigned a value of 2. This process does not affect the external variable a.
2. Pass reference value
The output is 2, so we know that the function passes the address of the variable, so M in the function body gets the passed address, so the attribute x is assigned a value of 2 and will also affect A pointing to the same memory address.
Summary
Now back to the opening question:
Variable a is the original value and variable b is the reference value. One is the value and the other is the address passed into the function body. Therefore, after the function is run, the variable a will not change, but the value of variable b will change.