技术文摘
JavaScript函数参数与实参:传递究竟是值还是引用
JavaScript函数参数与实参:传递究竟是值还是引用
在JavaScript编程中,理解函数参数与实参的传递机制,即到底是值传递还是引用传递,是一个关键且容易混淆的知识点。这一机制对于编写高效、正确的代码至关重要。
首先来明确值传递和引用传递的概念。值传递,简单来说,就是函数接收的是实参值的一个副本,对函数内部参数的修改不会影响到函数外部的实参。而引用传递则是函数接收的是实参的内存地址引用,函数内部对参数的修改会直接反映到函数外部的实参上。
在JavaScript中,基本数据类型(如Number、String、Boolean、Null、Undefined、Symbol)是按值传递的。例如:
function changeNumber(num) {
num = num + 1;
return num;
}
let originalNum = 5;
let result = changeNumber(originalNum);
console.log(originalNum); // 输出5,originalNum未被改变
这里函数changeNumber接收的是originalNum值的副本,对副本的修改不会影响到原始值。
然而,对于对象(包括数组和函数)这类引用数据类型,情况则有所不同。当将对象作为参数传递给函数时,传递的是对象的引用。看下面的例子:
function changeObject(obj) {
obj.property = "new value";
}
let myObject = { property: "old value" };
changeObject(myObject);
console.log(myObject.property); // 输出"new value",对象被修改了
在这个例子中,函数changeObject接收的是myObject的引用,所以对其内部属性的修改会反映到原始对象上。
需要注意的是,虽然对象是引用传递,但如果在函数内部重新给参数赋值一个新对象,那么原始对象不会受到影响。比如:
function replaceObject(obj) {
obj = { newProperty: "new object" };
}
let original = { someProperty: "original" };
replaceObject(original);
console.log(original.someProperty); // 输出"original",原始对象未被替换
这是因为在函数内部重新赋值时,参数指向了一个新的对象,而原始对象的引用并未改变。
深入理解JavaScript函数参数与实参的传递机制,无论是值传递还是引用传递,能够帮助开发者更准确地预测代码行为,避免潜在的错误,编写出更健壮、高效的程序。
TAGS: 值传递 引用传递 JavaScript函数参数 JavaScript实参
- Spring Boot、Nacos 与 gRPC:全新微服务通信选择,有别于 OpenFeign
- 轻松搞懂 RPC 不再难
- 一文解析 Maven 拉包原理
- Java 中坐标点距离与平行线交点算法全析
- 为何在 CSS 中绝不能用 px 设定字体大小
- 无需图片,CSS 遮罩合成打造带圆角环形 loading 动画
- 自省:使用 Executors.xxx 违反阿里 Java 代码规范,难道不再写定时任务?
- 五分钟搞定验证码,你掌握了吗?
- Xijs 开箱即用的 JS 工具库更新指南
- B站运用 Flink 实现海量用户行为实时 ETL 的应用实践
- SpringBoot 静态资源配置原理深度剖析
- Vuepress-Theme-Hope:轻松搭建酷炫个人博客
- 前端生态圈的技术趋势一览
- TortoiseORM 中 Order_By 排序的掌握之道
- Java 基于向量的移动方向、线段角度计算