Cách tránh cuộc gọi theo tham chiếu trong JavaScript

JavaScript được coi là ngôn ngữ truyền theo giá trị, nhưng tại thời điểm một biến tham chiếu đến một đối tượng, giá trị sẽ trở thành tham chiếu của đối tượng đó

Bây giờ, hãy xem những gì được truyền theo giá trị và truyền theo tham chiếu

Khi truyền theo giá trị, một hàm có thể được gọi bằng cách truyền trực tiếp giá trị của biến làm đối số. Nếu bạn thay đổi đối số bên trong hàm thì sẽ không ảnh hưởng đến biến được truyền từ bên ngoài vào hàm

Vì JavaScript luôn truyền theo giá trị, nên việc thay đổi giá trị của biến sẽ không thay đổi nguyên hàm cơ bản (số hoặc chuỗi)

Hãy chứng minh điều đó trong ví dụ dưới đây

Cách tránh cuộc gọi theo tham chiếu trong JavaScript
Javascript thay đổi giá trị biến

hàm callByValue(var1, var2) { bảng điều khiển. log("Cuộc gọi nội bộ"); . nhật ký ("var1 = " + var1 + " var2 = " + var2); . log("Trước khi gọi"); . nhật ký ("var1 = " + var1 + " var2 = " + var2); . log("Sau Cuộc Gọi"); . nhật ký ("var1 = " + var1 + " var2 = " + var2);

Đầu ra sẽ như sau

Before Call by Value Method
var1 =100 var2 =200
Inside Call by Value Method
var1 =10 var2 =20
After Call by Value Method
var1 =100 var2 =200

Nhưng trong trường hợp một biến tham chiếu đến một đối tượng bao gồm một mảng, thì giá trị là tham chiếu đến đối tượng

Truyền theo giá trị là cách lập trình an toàn hơn, ngăn người lập trình ghi đè các biến bên trong hàm. JavaScript và các ngôn ngữ lập trình hiện đại khác sử dụng nó khi nói đến nguyên thủy

Khi truyền tham chiếu, một hàm có thể đượ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ố. Nếu thay đổi đối số bên trong hàm sẽ ảnh hưởng đến biến được truyền từ bên ngoài hàm vào

Trong JavaScript, các đối tượng và mảng được truyền theo tham chiếu

Đây là một ví dụ

Cách tránh cuộc gọi theo tham chiếu trong JavaScript
Các đối tượng và mảng Javascript được truyền theo tham chiếu

hàm callByReference(obj) { bảng điều khiển. log("Gọi bên trong theo tham chiếu"); . a = 100; . nhật ký (đối tượng); . 1}; . log("Trước khi gọi theo tham chiếu"); . nhật ký (đối tượng); . log("Sau khi gọi theo tham chiếu"); . nhật ký (đối tượng);

Đầu ra sẽ là

Before Call by Reference Method
{a: 1}
Inside Call by Reference Method
{a: 100}
After Call by Reference Method
{a: 100}

Các yếu tố đơn giản nhất của ngôn ngữ lập trình được gọi là nguyên thủy. Chúng khác nhau từ ngôn ngữ này sang ngôn ngữ khác nhưng nói chung là giá trị bất biến cơ bản nhất

Các kiểu dữ liệu nguyên thủy JavaScript sau đây được truyền theo giá trị. chuỗi, boolean, số, null, không xác định

Các nguyên hàm được sao chép theo giá trị của chúng có nghĩa là biến được truyền truy cập theo giá trị của nó

Nguyên thủy là bất biến, có nghĩa là giá trị của chúng không thể thay đổi nhưng có thể được gán lại

Các đối tượng trong JavaScript thuộc loại tham chiếu

Không giống như giá trị nguyên thủy, kích thước của giá trị tham chiếu là động;

Đối tượng là một tập hợp các thuộc tính có thể tham chiếu bất kỳ kiểu dữ liệu nào, bao gồm các đối tượng và giá trị nguyên thủy. Bạn có thể tạo các đối tượng có dấu ngoặc nhọn {…} với danh sách các thuộc tính

Nói chung, các đối tượng đi qua hầu hết mọi khía cạnh của JavaScript. Do đó nó là một trong những điều đầu tiên để học

Lúc đầu, JavaScript có vẻ khá đơn giản. Tuy nhiên, ngôn ngữ này có nhiều sắc thái, mạnh mẽ và phức tạp hơn đáng kể so với những gì người ta tin tưởng ban đầu. Nhiều điểm phức tạp của JavaScript dẫn đến một số vấn đề phổ biến—10 vấn đề trong số đó chúng tôi thảo luận ở đây—khiến mã không hoạt động như dự kiến. Điều quan trọng là phải nhận thức được và tránh những cạm bẫy này trong hành trình trở thành nhà phát triển JavaScript bậc thầy

Chia sẻ

Chia sẻ

Cách tránh cuộc gọi theo tham chiếu trong JavaScript

Lúc đầu, JavaScript có vẻ khá đơn giản. Tuy nhiên, ngôn ngữ này có nhiều sắc thái, mạnh mẽ và phức tạp hơn đáng kể so với những gì người ta tin tưởng ban đầu. Nhiều điểm phức tạp của JavaScript dẫn đến một số vấn đề phổ biến—10 vấn đề trong số đó chúng tôi thảo luận ở đây—khiến mã không hoạt động như dự kiến. Điều quan trọng là phải nhận thức được và tránh những cạm bẫy này trong hành trình trở thành nhà phát triển JavaScript bậc thầy

Cách tránh cuộc gọi theo tham chiếu trong JavaScript

Bởi Ryan J. Peterson

Chuyên gia đã được xác minh  về Kỹ thuật

Ryan là một kiến ​​trúc sư, doanh nhân và nhà phát triển. Anh ấy có kỹ năng xây dựng các hệ thống phần mềm có thể mở rộng, có thể mở rộng trên đám mây

Làm cách nào để tránh cuộc gọi theo tham chiếu trong đối tượng JavaScript?

Không có "chuyển qua tham chiếu" cho bất kỳ biến nào trong JavaScript . Tất cả các biến và đối số được gán theo giá trị, nhưng đối với các đối tượng, giá trị của biến là một tham chiếu. Do đó, khi bạn truyền một đối tượng và thay đổi các thành viên của nó, những thay đổi đó vẫn tồn tại bên ngoài hàm.

Có phải JavaScript luôn chuyển qua 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ị.

Làm cách nào để thay đổi giá trị theo tham chiếu trong JavaScript?

Chuyển theo tham chiếu. Trong Truyền theo tham chiếu, Hàm được gọi bằng cách truyền trực tiếp tham chiếu/địa chỉ của biến dưới dạng đối số . Vì vậy, thay đổi giá trị bên trong chức năng cũng thay đổi giá trị ban đầu. Trong mảng JavaScript và Đối tượng theo sau chuyển qua thuộc tính tham chiếu.

JavaScript có chuyển theo tham chiếu hoặc chuyển theo giá trị không?

JavaScript hoàn toàn là giá trị truyền qua