• 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 }

  • 相关阅读:
    发送邮件
    C#操作Excel总结
    注意!监控MySQL服务是否正常,懂这4种方法就可以了
    Linux磁盘空间爆满怎么办?定时文件清理脚本配置实现
    Linux 服务器必备的安全设置,建议收藏!
    MySQL入门到精通:MySQL 选择数据库
    TIOBE3月榜单公布!C 语言稳居第一,将新增功能,消除差异
    C++如何读取带空格字符串?这5种方法教会你
    C语言丨二分查找算法详解(含示例代码)
    线上故障了!居然是因为Linux磁盘缓存机制导致的
  • 原文地址:https://www.cnblogs.com/wendingding/p/15760885.html
Copyright © 2020-2023  润新知