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

JavaScript参数传递_值引用机制

狼影
发布: 2025-11-30 18:34:02
原创
333人浏览过
JavaScript函数传参是按值传递引用。基本类型传递值的副本,修改不影响原变量;对象类型传递引用地址的副本,可修改对象属性但重新赋值参数不影响原引用。

javascript参数传递_值引用机制

JavaScript中的参数传递机制常被误解为“值传递”或“引用传递”的简单分类,但实际上它遵循一种更准确的说法:按值传递引用,也叫引用的值传递

基本类型:真正的值传递

当函数接收一个基本类型(如 number、string、boolean、null、undefined、symbol)作为参数时,传入的是该值的一个副本。

说明:
  • 在函数内部修改参数变量,不会影响外部原始变量。
  • 因为传递的是“值的拷贝”,两者完全独立。

示例:

function changeValue(a) {
  a = 10;
  console.log(a); // 输出 10
}
let num = 5;
changeValue(num);
console.log(num); // 输出 5 —— 原值未变
登录后复制

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

当参数是对象(包括数组、函数、普通对象)时,JavaScript传递的是该对象在堆内存中地址的副本,也就是“引用的值”。

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

关键点:
  • 函数内部可以通过这个引用访问并修改对象的实际内容。
  • 但如果重新赋值参数变量,只会改变局部引用,不影响原引用。

示例1:修改对象属性

帮管客CRM客户管理系统
帮管客CRM客户管理系统

基于WEB的企业计算,php+MySQL进行开发,性能稳定可靠,数据存取集中控制,避免了数据泄漏的可能,采用加密数据传递参数,保护系统数据安全,多级的权限控制,完善的密码验证与登录机制更加强了系统安全性。

帮管客CRM客户管理系统 1377
查看详情 帮管客CRM客户管理系统
function changeObj(obj) {
  obj.name = "changed";
  console.log(obj.name); // 输出 "changed"
}
let person = { name: "original" };
changeObj(person);
console.log(person.name); // 输出 "changed" —— 原对象被修改
登录后复制

示例2:重新赋值参数

function reassignObj(obj) {
  obj = { name: "new" };
  console.log(obj.name); // 输出 "new"
}
let person = { name: "original" };
reassignObj(person);
console.log(person.name); // 输出 "original" —— 原对象未受影响
登录后复制

如何理解“按值传递引用”?

可以把变量看作一个“指针盒子”:

  • 基本类型:盒子里装的是实际的值。
  • 对象类型:盒子里装的是内存地址(引用)。
  • 函数传参时,把这个“盒子的内容”复制一份传进去。

所以即使传的是引用,也只是复制了地址值,不是共享同一个盒子。

实际开发中的注意事项

  • 想避免意外修改对象?使用 Object.assign({}, obj){...obj} 创建浅拷贝。
  • 需要深拷贝时可考虑 JSON.parse(JSON.stringify(obj))(注意局限)或使用专门库。
  • 理解这一点有助于排查“为什么我的对象在函数里变了”的问题。

基本上就这些。不复杂但容易忽略细节。

以上就是JavaScript参数传递_值引用机制的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

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

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