专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

前端笔记-JavaScript的参数的传递方式

ins518 2025-01-05 18:04:15 技术文章 15 ℃ 0 评论

基本类型传递?式

由于js中存在复杂类型和基本类型,对于基本类型??,是按值传递的。

var a = 1;
function test(x) {
x = 10;
console.log(x);
}
test(a); // 10
console.log(a); // 1

虽然在函数 test 中 a 被修改,并没有有影响到 外部 a 的值,基本类型是按值传递的

复杂类型按引?传递

我们将外部 a 作为?个对象传? test 函数

var a = {
a: 1,
b: 2
};
function test(x) {
x.a = 10;
console.log(x);
}
test(a); // { a: 10, b: 2 }
console.log(a); // { a: 10, b: 2 }

可以看到,在函数体内被修改的 a 对象也同时影响到了外部的 a 对象,可?复杂类型是按引?传递的.

可是如果再做?个实验:

var a = {
a: 1,
b: 2
};
function test(x) {
x = 10;
console.log(x);
}
test(a); // 10
console.log(a); // { a: 1, b: 2 }

外部的 a 并没有被修改,如果是按引?传递的话,由于共享同?个堆内存, a 在外部也会表现为 10 才对. 此时的复杂类型同时表现出了按值传递和按引?传递的特性。

按共享传递

复杂类型之所以会产?这种特性,原因就是在传递过程中,对象 a 先产?了?个 副本a ,这个 副本a 并不是深克隆得到的 副本a , 副本a 地址同样指向对象 a 指向的堆内存。因此在函数体中修改 x=10 只是修改了 副本a , a 对象没有变化. 但是如果修改了 x.a=10 是修改了两者指向的同?堆内存,此时对象 a 也会受到影响。

有?讲这种特性叫做传递引?,也有?种说法叫做按共享传递。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表