zoukankan      html  css  js  c++  java
  • js 变量以及函数传参

    一、变量:

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

    如下:

    • 基本类型
    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);

    输出:

    总结:

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

    二、函数传参

    无论是基本类型还是引用类型在函数传参都是按值传参。

    也许大家都会有疑惑为什么变量要基本类型和引用类型 一个按值 一个按引用?

    • 基本类型=>和变量赋值一样,将一个值传递函数的形参(局部变量),在函数内调用该变量,并改变并不会影响函数外的变量。因为这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 所以显然传递的值即对象在堆中的内存地址。

  • 相关阅读:
    Mockito 简明教程
    说说初用 Mock 工具测试碰到的坑
    java的mock测试框架
    使用模拟对象(Mock Object)技术进行测试驱动开发
    微信小程序
    微信小程序
    uniapp
    微信小程序
    微信小程序
    微信小程序
  • 原文地址:https://www.cnblogs.com/evilliu/p/10796325.html
Copyright © 2011-2022 走看看