今天,我回答了一个关于Javascript的问题,它涉及分配问题,所以我想对这个问题做一个很好的总结。

复制代码代码如下所示:

创建一个测试;

Var(b =函数){ };

B =测试;

函数变化(m,n){

M =‘变';

n. =‘变';

}

改变(A,B);



当执行上述代码时变量A和B的值会发生变化吗

原始值和参考值

在前面的文章中,引入了原始值和引用值。原始值是指未定义的、空的、布尔的、数字的、字符串等。它们存储在堆栈中,而引用值是从对象中集成的,这些值存储在堆中。

这是两者之间的明显区别:

复制代码代码如下所示:

创建一个测试;

var b =新的字符串(测试);

创建一个真实的;

var b =新的布尔(真实的);



上述四个变量a和a是原始值,而b和b是引用值。

分配机制

在了解了原始值和引用值之间的差异之后,您可以对Javascript的分配机制进行具体介绍。

在Javascript中,对于原始值类型的每个变量,每个赋值都将生成一个副本,并且作为参考值,因为它的名称是,它通过引用赋值来引用同一个存储对象的内存。

原始价值的转让:

复制代码代码如下所示:

var a = 1; /原始值

变量a

B = 2;与a无关。

警报(a);输出1



参考值的赋值:

复制代码代码如下所示:

var =新的(对象);引用值

内= 1;

指向相同的内存。

b.x = 2; / /修改B的影响

警报(内); / /输出2



参数传递

现在让我们看看两种类型的值是如何传递给函数的函数的。

1。传递原始值

复制代码代码如下所示:

var a=1;

函数测试(m){

m=2;

}

测试(a);

警报(a);输出1



输出是1,所以我们知道函数只传递变量的值,所以函数体中m的值得到1,然后分配给2,不影响外部变量a。

2。转移的参考价值

复制代码代码如下所示:

var =新对象();

内= 1

函数测试(m){

m.x = 2;

}

测试(a);

警报(内); / /输出2



输出是2,所以我们知道函数将变量的地址传递给它,所以函数体中的m得到地址,所以属性x被赋值给2,这也会影响指向同一内存地址的指针。

总结

现在回到问题的开始:

复制代码代码如下所示:

创建一个测试;

Var(b =函数){ };

B =测试;

函数变化(m,n){

M =‘变';

n. =‘变';

}

改变(A,B);



变量a是原始值,变量b是参考值。传递函数的值在体内。一个是地址,所以变量a在函数运行后不会改变,变量B的值会改变。