Trong JavaScript, khi truyền các tham số vào hàm, các giá trị mặc định được sao chép. Điều này có nghĩa là các thay đổi bạn thực hiện trong hàm không ảnh hưởng đến các tham số ban đầu. Tuy nhiên, nếu bạn truyền tham chiếu, các thay đổi sẽ ảnh hưởng đến giá trị ban đầu của biến.
Truyền tham trị (Passing by value of primitive values)
Các kiểu dữ liệu nguyên thủy như số nguyên, số thực và ký tự được gọi là giá trị truyền tham trị.
Hãy xem ví dụ sau:
function square(x) { x = x * x; } let y = 10; square(y); console.log(y); // - không thay đổi
Trong ví dụ này, khi truyền biến y
vào hàm square()
, giá trị của y
được sao chép vào biến x
. Tuy nhiên, thay đổi giá trị của x
không ảnh hưởng đến y
. Do đó, giá trị của y
không thay đổi sau khi gọi hàm square()
.
Truyền tham chiếu (Passing by value of references)
Khi bạn truyền giá trị tham chiếu vào hàm, tức là truyền tham chiếu tới đối tượng, thì hàm có thể thay đổi các thuộc tính của đối tượng đó.
Hãy xem ví dụ sau:
function turnOn(machine) { machine.isOn = true; } let computer = { isOn: false }; turnOn(computer); console.log(computer.isOn); // true
Trong ví dụ này, khi truyền biến computer
vào hàm turnOn()
, giá trị của computer
và machine
trỏ tới cùng một đối tượng. Do đó, thay đổi thuộc tính isOn
của machine
trong hàm turnOn()
cũng làm thay đổi giá trị của computer
.
Ngoài ra, hàm không thay đổi tham chiếu để trỏ tới một đối tượng khác.
Vậy, khi bạn truyền tham trị vào hàm, giá trị gốc của biến không thay đổi. Tất cả các tham số truyền vào hàm trong JavaScript mặc định là truyền bằng giá trị, chứ không phải truyền bằng tham chiếu.
Nếu bạn quan tâm đến JavaScript, hãy tham khảo những bài viết hữu ích khác về chủ đề này. Hãy tham gia nhóm "Học lập trình" để thảo luận thêm về các vấn đề liên quan.