Nếu bạn đã học một số ngôn ngữ cấp thấp, chẳng hạn như C/C++, như tôi đã học ở trường đại học, bạn có thể đã biết rằng các biến có thể được truyền dưới dạng giá trị hoặc dưới dạng tham chiếu (và tất nhiên, dưới dạng con trỏ, Show Trong khi trong C++, bạn cần xác định nó một cách rõ ràng, thì trong JavaScript, logic này được tích hợp sẵn. Đó là lý do tại sao không phải tất cả các nhà phát triển bắt đầu làm việc với JavaScript đều biết về sự khác biệt quan trọng này, điều này có thể dẫn đến rất nhiều lỗi không mong muốn. Điều đầu tiên Trước tiên, hãy tìm hiểu ý nghĩa của nó
Trong JavaScript, tất cả các kiểu dữ liệu nguyên thủy (Chuỗi, Số, Boolean) được truyền theo giá trị và các kiểu dữ liệu phức tạp như Mảng và Đối tượng được truyền theo tham chiếu Bây giờ chúng ta sẽ điều tra nó bằng một số ví dụ đơn giản Ở đây chúng tôi khởi tạo biến Nó hoạt động theo cách tương tự khi chuyển các biến vào các đối số của hàm Nhưng khi chúng ta cố gắng chuyển một biến phức tạp (e. g. Object), nó sẽ hoạt động hoàn toàn khác Dưới đây chúng ta có thể thấy rằng khi chúng ta truyền một đối tượng cho một biến hoặc hàm khác, nó sẽ được truyền dưới dạng tham chiếu và những thay đổi trong một biến sẽ ảnh hưởng đến tất cả các biến khác tham chiếu đến cùng một địa chỉ bộ nhớ Nhưng làm thế nào chúng ta có thể vượt qua hành vi mặc định? JavaScript không cho phép chọn rõ ràng cách chuyển một biến, vì vậy chúng ta cần thực hiện các giải pháp thay thế để thay đổi hành vi mặc định Truyền các biến nguyên thủy làm tham chiếuTôi không tìm thấy cách nào khác để chuyển các biến nguyên thủy làm tham chiếu ngoại trừ gói chúng vào một đối tượng hoặc một mảng rồi phá hủy nó Nhưng nó không có ý nghĩa gì về mặt hiệu suất vì chúng ta cần tạo và hủy cấu trúc một biến phức tạp Nếu bạn tìm thấy một giải pháp tốt hơn, xin vui lòng chia sẻ nó với chúng tôi Truyền các biến phức tạp dưới dạng giá trịĐể chuyển một biến phức tạp thành một giá trị, chúng ta chỉ cần tạo bản sao của nó. Có nhiều cách để làm điều đó Đối với các đối tượng
Đối với mảng
Tôi phải cảnh báo bạn rằng tất cả các phương thức này đều có một chi tiết quan trọng — chúng chỉ tạo ra một bản sao nông của một biến ban đầu. Điều đó có nghĩa là nếu bên trong mảng hoặc đối tượng của bạn, bạn có các biến phức tạp được lồng vào nhau, chúng sẽ vẫn được sao chép theo tham chiếu Chỉ có một số cách để tạo bản sao sâu
Phần kết luận Và thông báo quan trọng cuối cùng. Hãy cẩn thận khi bạn sử dụng các phương thức tích hợp sẵn hoặc thư viện hoạt động với mảng và đối tượng, luôn kiểm tra xem chúng có thay đổi biến ban đầu hay tạo ra biến mới không E. g. phương thức Làm cách nào để chuyển qua tham chiếu trong JavaScript?Trong Truyền tham chiếu, một hàm được gọi bằng cách truyền trực tiếp tham chiếu/địa chỉ của biến làm đối số . Thay đổi đối số bên trong hàm ảnh hưởng đến biến được truyền từ bên ngoài hàm. Trong các đối tượng và mảng Javascript được truyền theo tham chiếu.
JavaScript có chuyển theo giá trị hoặc theo tham chiếu không?JavaScript luôn là giá trị truyền qua . Điều này có nghĩa là mọi thứ trong JavaScript là một loại giá trị và các đối số của hàm luôn được truyền theo giá trị. Điều đó đang được nói, các loại đối tượng khó hiểu hơn một chút. Sự nhầm lẫn nằm ở chỗ các loại đối tượng là các loại tham chiếu được truyền theo giá trị.
Vượt qua ví dụ tham chiếu là gì?Truyền tham chiếu có nghĩa là chuyển tham chiếu của một đối số trong hàm gọi đến tham số hình thức tương ứng của hàm được gọi . Hàm được gọi có thể sửa đổi giá trị của đối số bằng cách sử dụng tham chiếu của nó được truyền vào. Ví dụ sau đây cho thấy cách các đối số được truyền bằng tham chiếu.
JavaScript có chuyển chuỗi theo tham chiếu không?Trên thực tế, Chuỗi trong Javascript thực sự được truyền “theo tham chiếu” . Do đó, việc gọi một hàm bằng một chuỗi không liên quan đến việc sao chép nội dung của chuỗi. Tuy nhiên, Chuỗi JavaScript là bất biến; . |