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ố.
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.
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
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ớ.
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
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.