Chuyển theo giá trị
Trong chuyển theo giá trị , một hàm được gọi bằng cách truyền trực tiếp giá trị của biến làm đối số. Việc thay đổi đối số bên trong hàm không ảnh hưởng đến biến được truyền từ bên ngoài hàm. Javascript luôn chuyển theo giá trị vì vậy việc thay đổi giá trị của biến không bao giờ thay đổi giá trị nguyên thủy cơ bản (Chuỗi hoặc số).
Trong ví dụ sau, biến 'a' đã được gán giá trị 1. Nhưng bên trong hàm 'change', nó đã được gán giá trị 2. Vì javascript luôn là chuyển theo giá trị , đầu ra được hiển thị sẽ là '1' chứ không phải '2'.
Ví dụ
<html> <body> <script> let a = 1; let change = (val) => { val = 2 } change(a); document.write(a); </script> </body> </html>
Đầu ra
1
Chuyển qua tài liệu tham khảo
Có một số trường hợp địa chỉ được truyền thay vì đối số để gọi một hàm. Khi đó, việc thay đổi giá trị bên trong hàm sẽ ảnh hưởng đến biến được truyền từ bên ngoài hàm. Đây được gọi là chuyển qua tham chiếu . Trong javascript, hầu hết các mảng và đối tượng tuân theo chuyển qua tham chiếu.
Trong ví dụ sau, một đối tượng có tên 'a' được khai báo bên ngoài hàm 'change'. Ở đây, người ta nên chú ý rằng biến 'a' đã bị đột biến nhưng không được gán với giá trị 2, như được hiển thị trong ví dụ 2. A chuyển theo tham chiếu diễn ra khi đột biến đã xảy ra.
Ví dụ-1
<html> <body> <script> let a = {num:1}; let change = (val) => { val.num = 2 } change(a); document.write(JSON.stringify(a)); </script> </body> </html>
đầu ra
{"num":2}
Trong ví dụ sau, thay vì đột biến , biến 'a' được gán với giá trị 2. Vì vậy, chuyển theo giá trị diễn ra và sẽ không ảnh hưởng đến biến bên ngoài.
Ví dụ-2
<html> <body> <script> let a = {num : 1}; let change = (val) => { val = {num :2}; } change(a); document.write(JSON.stringify(a)); </script> </body> </html>
đầu ra
{"num":1}