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
这里的 x 是 a 的副本,修改 x 不会影响 a。
立即学习“Java免费学习笔记(深入)”;
对于对象(包括数组、函数、普通对象等),变量存储的不是对象本身,而是指向该对象在内存中的地址(即引用)。当把这个变量传给函数时,传递的是这个“引用的值”,而不是引用本身。
例如:
let obj = { name: "Alice" };
function modify(o) {
o.name = "Bob";
}
modify(obj);
console.log(obj.name); // 输出 "Bob"
虽然参数传递仍是“按值”,但这个“值”是一个内存地址。函数内的 o 拿到了相同的地址,因此可以修改该地址指向的对象内容。
然而,如果在函数内重新赋值参数变量,就不会影响原对象:
let obj = { name: "Alice" };
function reassign(o) {
o = { name: "Charlie" };
}
reassign(obj);
console.log(obj.name); // 仍输出 "Alice"
因为 o = {...} 改变了局部变量 o 的指向,并未修改原对象。
这种机制也被称为“按共享传递”——传递的是引用的一个副本。它既不是严格的“按引用传递”(如C++中可改变原变量指向),也不是简单的“按值传递”原始数据。
关键点在于:
基本上就这些。理解这一点有助于避免在处理对象时产生意外的副作用。记住:JavaScript始终按值传递,而对象的“值”是引用。不复杂,但容易忽略。
以上就是理解JavaScript中的按值传递与引用传递_javascript核心的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号