JS 传值 传址

Posted 雪松

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS 传值 传址相关的知识,希望对你有一定的参考价值。

在JS中,有两种不同的方式可以操作数据的值,这两种技术分别叫做 传值 和 传址

传值:在赋值过程中,首先对值进行了一份拷贝,而后将这份拷贝存储到一个变量、对象属性或数组元素中。拷贝的值和原始的值是完全独立、互不影响的。当一份数据通过值传递给一个函数,实际上被传递的不是数据本身,而是数据的一份拷贝。因此,如果函数修改了这个值,影响到的只是数据的那份拷贝,而并不影响数据本身。

传址:在赋值过程中,变量实际上存储的是数据的地址(对数据的引用),而不是原始数据或者是数据的拷贝。如果值通过一个地址发生了改变,这个改变也会通过原始地址表现出来。

根据操作数据方式的不同,我们可以把数据类型分为两类:基础类型 和 引用类型

基础类型主要有:数字(Number)、布尔类型(Boolean)、字符串(String);其操作方式为 传值。

引用类型主要有:对象(Object) —— 数组(Array)、函数(Function);其操作方式为 传址。

以数字为例:

复制代码
1 var n = 1;
2 var m = n;
3 function total(x,y){
4     x = x + y;
5 }
6 total(n,m);
7 if(n == 1){
8     alert(1);
9 }
复制代码

执行结果:输出1

以函数为例:

复制代码
1 function a(){
2     var x = {\'n\':1};
3     var y = x;
4     x.n = 2;
5     console.log(y);
6 };
7 a();    
复制代码

 执行结果:{\'n\':2}

以数组为例:

复制代码
1  function b(){
2      var x = [1,2];
3      var y = x;
4      y[2] = 3;
5      console.log(x);
6  };
7  b(); 
复制代码

执行结果:[1,2,3]

以上是关于JS 传值 传址的主要内容,如果未能解决你的问题,请参考以下文章

Js 赋值传值和引用传址

JS 传值 传址

C语言函数中的传值和传址

C语言的传值与传址调用

vb当中,参数传递默认方式是传值?传址?还是传址和传值?

Java传值和传址