javascript统一按值传递:原始类型传值副本,修改互不影响;引用类型传地址副本,可修改对象内容但重新赋值不改变原指向。

JavaScript 中的“传值”不是非黑即白的“按值传递”或“按引用传递”,而是统一按值传递,但这个“值”的含义因类型而异。
原始类型:传的是值本身
string、number、boolean、null、undefined、symbol、bigint 这7种原始类型,变量中直接存着数据。赋值或传参时,复制的是这个具体数值的完整副本。
- 修改新变量,不会影响原变量,因为两者内存独立
- 看似“改字符串某个字符”,实际是创建了新字符串,原值不变
- 给原始类型加属性(如 str.age = 25)会被静默忽略,不报错也不生效
引用类型:传的是地址的副本
object、array、function、date、map、set 等都属于引用类型。变量里存的不是数据本身,而是堆内存中对象的地址(指针)。赋值或传参时,复制的是这个地址值。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 两个变量指向同一块堆内存,通过任一变量修改对象属性,另一方立刻可见
- 但若在函数内对参数重新赋值(如 obj = {}),只是让参数指向新地址,不影响外部变量原来的指向
- 也就是说:能改“里面的内容”,但改不了“它原来指向谁”
关键看操作是否改变绑定关系
决定行为差异的不是类型本身,而是你有没有执行“重新赋值”操作(=)。
- 只调用方法(arr.push()、obj.name = 'x')→ 影响外部
- 直接赋新值(arr = []、obj = {a:1})→ 不影响外部,只改了当前变量的指向
一个类比帮你记住
原始类型像复印文件:你拿走一份复印件,怎么涂改都不影响原件;引用类型像共享网盘链接:你和同事各保存了一个相同链接,谁改了文件内容,对方刷新就能看到——但如果你删掉自己收藏的链接,对方的链接还在。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










