js 变量以及函数传参

1、变量:函数

  • 基本类型是变量对象从新建立一个新值给变量对象空间,虽然是同一个值可是互不影响。
  • 引用类型是也是将一个值从新赋值给新的变量空间,可是这个值是堆中对象的一个指针,新的变量和旧的变量指向是同一个对象。

以下:spa

  • 基本类型
1     let num=1;
2     let num1=num;
3     num=num+2;
4     console.log(num,num1);

输出:指针

  • 引用类型
1     let obj={};
2     let obj1=obj;
3     obj.name='tom';
4     console.log(obj,obj1);

输出:code

总结:对象

  1. 基本类型在赋值新的变量的时候,是从新建立一个值给新的变量空间,旧的变量和新的变量互不影响。
  2. 引用类型的,在赋值新的变量,是将对象在堆中的内存指针赋值给新的变量空间,在改变一个变量的属性,直接影响另外一个变量,也就是说他们指向的是同一个对象。

2、函数传参blog

不管是基本类型仍是引用类型在函数传参都是按值传参。内存

也许你们都会有疑惑为何变量要基本类型和引用类型 一个按值 一个按引用?作用域

  • 基本类型=>和变量赋值同样,将一个值传递函数的形参(局部变量),在函数内调用该变量,并改变并不会影响函数外的变量。由于这2个是不一样的值互不影响。
1     test=(num)=>{
2         num+=1;
3         console.log(num);
4     };
5     let testVal=2;
6     test(testVal);
7     console.log(testVal);//2

 

  • 引用类型,传递的是对象在堆中的内存地址值,而不是引用!!
1    testObj=(obj)=>{
2         obj=new Object();
3         obj.name='evil';
4         console.log(obj.name);
5     };
6     let  testMyObj={name:'jack'};
7     testObj(testMyObj);
8     console.log(testMyObj.name);//jack

 

引用类型传递是对象的内存地址,而不是引用,若是是引用那么在函数testObj 在函数做用域中的局部变量obj在改变引用的时候,函数外层的testMyObj输出的name值应该是evil,而不是jack 因此显然传递的值即对象在堆中的内存地址。console

相关文章
相关标签/搜索