JavaScript sử dụng cả hai phương pháp truyền tham số: pass by value (tham trị) và pass by reference (tham chiếu), tùy thuộc vào kiểu dữ liệu của tham số.
1. Pass by Value (Tham trị)
Khi bạn truyền một kiểu dữ liệu nguyên thủy (primitive type) như Number
, String
, Boolean
, null
, undefined
, hoặc Symbol
, JavaScript sẽ truyền giá trị của biến đó. Điều này có nghĩa là một bản sao của giá trị được tạo ra và sử dụng trong hàm. Bất kỳ thay đổi nào đối với tham số trong hàm sẽ không ảnh hưởng đến biến gốc bên ngoài.
Ví dụ về Pass by Value
function updateValue(x) {
x = 10; // Thay đổi giá trị của x
console.log("Inside function:", x); // Kết quả: 10
}
let a = 5;
updateValue(a);
console.log("Outside function:", a); // Kết quả: 5
2. Pass by Reference (Tham chiếu)
Khi bạn truyền một đối tượng (object) hoặc mảng (array), JavaScript sẽ truyền tham chiếu đến đối tượng đó, không phải giá trị của nó. Điều này có nghĩa là bất kỳ thay đổi nào đối với đối tượng hoặc mảng trong hàm sẽ ảnh hưởng đến đối tượng gốc bên ngoài, vì cả hai đều tham chiếu đến cùng một địa chỉ bộ nhớ.
Ví dụ về Pass by Reference
function updateObject(obj) {
obj.name = "John"; // Thay đổi thuộc tính của obj
console.log("Inside function:", obj.name); // Kết quả: John
}
let person = { name: "Alice" };
updateObject(person);
console.log("Outside function:", person.name); // Kết quả: John
Tóm tắt
- Tham trị (Pass by Value): Sử dụng cho kiểu dữ liệu nguyên thủy. Thay đổi trong hàm không ảnh hưởng đến biến gốc.
- Tham chiếu (Pass by Reference): Sử dụng cho đối tượng và mảng. Thay đổi trong hàm ảnh hưởng đến biến gốc.
Kết luận
Sự khác biệt giữa pass by value và pass by reference trong JavaScript là rất quan trọng khi làm việc với các kiểu dữ liệu khác nhau. Hiểu rõ cách thức hoạt động này sẽ giúp bạn tránh được những lỗi không mong muốn khi làm việc với hàm và biến trong JavaScript.