首页 > web前端 > js教程 > 正文

理解JavaScript中的按值传递与引用传递_javascript核心

紅蓮之龍
发布: 2025-11-01 09:25:02
原创
928人浏览过
JavaScript参数传递始终按值传递:基本类型传值副本,函数内修改不影响原变量;对象类型传引用的值,可修改对象属性但无法改变原变量指向。

理解javascript中的按值传递与引用传递_javascript核心

很多人在学习JavaScript时,对参数传递方式存在误解,尤其是“按值传递”和“引用传递”的概念。JavaScript中的所有参数传递都是按值传递的,但这个“值”在不同数据类型下表现不同,从而让人误以为存在“引用传递”。

基本类型:真正的按值传递

JavaScript中的基本类型(如 number、string、boolean、null、undefined、symbol 和 bigint)在赋值或传参时,是直接复制变量的值。

例如:

当把一个基本类型变量作为参数传入函数时,函数内部的操作不会影响外部变量。

let a = 10;
function changeValue(x) {
  x = 20;
}
changeValue(a);
console.log(a); // 输出 10

这里的 xa 的副本,修改 x 不会影响 a

立即学习Java免费学习笔记(深入)”;

对象类型:传递的是引用的值

对于对象(包括数组、函数、普通对象等),变量存储的不是对象本身,而是指向该对象在内存中的地址(即引用)。当把这个变量传给函数时,传递的是这个“引用的值”,而不是引用本身。

例如:

let obj = { name: "Alice" };
function modify(o) {
  o.name = "Bob";
}
modify(obj);
console.log(obj.name); // 输出 "Bob"

虽然参数传递仍是“按值”,但这个“值”是一个内存地址。函数内的 o 拿到了相同的地址,因此可以修改该地址指向的对象内容。

文心大模型
文心大模型

百度飞桨-文心大模型 ERNIE 3.0 文本理解与创作

文心大模型56
查看详情 文心大模型

然而,如果在函数内重新赋值参数变量,就不会影响原对象:

let obj = { name: "Alice" };
function reassign(o) {
  o = { name: "Charlie" };
}
reassign(obj);
console.log(obj.name); // 仍输出 "Alice"

因为 o = {...} 改变了局部变量 o 的指向,并未修改原对象。

如何理解“按共享传递”(Call by Sharing)

这种机制也被称为“按共享传递”——传递的是引用的一个副本。它既不是严格的“按引用传递”(如C++中可改变原变量指向),也不是简单的“按值传递”原始数据。

关键点在于:

  • 你无法通过参数修改原变量本身(比如让它指向新对象)
  • 但如果参数是对象,你可以修改该对象的属性

基本上就这些。理解这一点有助于避免在处理对象时产生意外的副作用。记住:JavaScript始终按值传递,而对象的“值”是引用。不复杂,但容易忽略。

以上就是理解JavaScript中的按值传递与引用传递_javascript核心的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号