Home  >  Article  >  Web Front-end  >  Detailed explanation of Javascript assignment mechanism_Basic knowledge

Detailed explanation of Javascript assignment mechanism_Basic knowledge

WBOY
WBOYOriginal
2016-05-16 16:30:451352browse

Today I answered a question about Javascript, which involved assignment issues, so I wanted to summarize this question well.

Copy code The code is as follows:

var a = 'test';
var b = function() {};
b.a = 'test';
function change(m, n) {
m = 'change';
n.a = 'change';
}
change(a, b);

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:

Copy code The code is as follows:

var a = 'test';
var b = new String('test');
var A = 'true';
var B = new Boolean('true');

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:

Copy code The code is as follows:

var a = 1;//Original value
var b = a;//Generate a copy to variable b
b = 2;//It has nothing to do with a
alert(a);//output 1

Assignment of reference values:

Copy code The code is as follows:

var A= new Object();//Reference value
A.x = 1;
var B = A; //Reference assignment, pointing to the same memory
B.x = 2;//Modifying B will affect A
alert(A.x);//Output 2

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

Copy code The code is as follows:

var a = 1;
function test(m) {
m = 2;
}
test(a);
alert(a);//output 1

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

Copy code The code is as follows:

var A= new Object();
A.x = 1
function test(M) {
M.x = 2;
}
test(A);
alert(A.x);//Output 2

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:

Copy code The code is as follows:

var a = 'test';
var b = function() {};
b.a = 'test';
function change(m, n) {
m = 'change';
n.a = 'change';
}
change(a, b);

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.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn