zoukankan      html  css  js  c++  java
  • javaScript系列 [36]Call by sharing

    JavaScript 语言中,函数调用时候参数的传递是"值传递"还是"引用传递" ?

    在 JavaScript 语言中 ,函数参数传递的是「值」而非「引用」,即我们使用的是值传递的方式,关于这一点,我们可以通过下面这段简短的代码来进行说明。

    /* 1、变量声明 */
    let x = 100;
    
    /* 2、函数声明 */
    function changeX(x) {
        x = 200;
    }
    
    /* 3、函数调用 */
    changeX(x);
    
    /* 4、打印输出 */
    console.log(`x = ${x}`); /* x = 100 */
    
    /* +++++++++++++= */
    
    /* 测试代码-A */
    let o1 = { name: "Yong" };
    
    function change_A(o1) {
        /* 注解:此处的o1为函数内部的局部参数(临时变量) */
        o1.name = "Xia"
    }
    change_A(o1);
    console.log(`o = `, o1); /* o1 =  { name: 'Xia' } */
    
    /* 测试代码-B */
    let o2 = { name: "Yong" };
    
    function change_B(o2) {
        /* 注解:此处的o2为函数内部的局部参数(临时变量) */
        o2 = { age: 18 };
    }
    change_B(o2);
    console.log(`o = `, o2); /* o =  { name: 'Yong' } */
    

    在上面的代码中,有几个点需要进行说明。在 changeX() change_A() change_B()中的x | o1 | o2这三个变量用的都是形参,也就是说函数内部的这三个变量都是局部变量,它们区别于外部的全局变量是临时的。当函数调用时通过 实参 ——> 形参 来创建和赋值,函数执行完后这些局部变量就会被销毁。

    函数调用时候都做了些什么?

    [1] 把实参的值赋值给形参,相当于在函数中执行下面的代码
        let x = x;     <!-- 把 x  这个变量保存的内容(数字-100)拷贝一份给左边变量存储 -->
        let o1 = o1;   <!-- 把 o1 这个变量保存的内容(指针-对象)拷贝一份给左边变量存储 -->
        let o2 = o2;   <!-- 把 o2 这个变量保存的内容(指针-对象)拷贝一份给左边变量存储 -->
    [2] 执行函数体中的代码
    

    通过/* 测试代码-A *//* 测试代码-B */的对比,我们可以知道JavaScript 函数是值传递的,如果 JavaScript 函数是引用传递的,那么/* 测试代码-B */执行后打印的结果应该是o = { age: 18 }

  • 相关阅读:
    Distributed System
    APP专项测试之兼容性测试
    面试如何正确谈薪?
    跳槽季,如何做好技术面试准备?
    Appium基础
    设置安装程序位置
    获取文件版本号
    28-PV&PVC
    Docker-文件拷贝
    Kubemark压测常用命令
  • 原文地址:https://www.cnblogs.com/wendingding/p/15760885.html
Copyright © 2011-2022 走看看