前端开发系列118-进阶篇之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 }

posted on 2022-12-18 09:43  文顶顶  阅读(27)  评论(0编辑  收藏  举报

导航