Loại JavaScript nào được chuyển qua tham chiếu?

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

Loại JavaScript nào được chuyển qua tham chiếu?
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ụ

Loại JavaScript nào được chuyển qua tham chiếu?
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

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ị. Nghe có vẻ kỳ lạ, một tham chiếu đến một đối tượng được truyền cho một hàm theo giá trị. Sự khác biệt tinh tế ở đây nằm ở chỗ một tham chiếu đối tượng được truyền theo giá trị không giống như truyền một đối tượng theo tham chiếu

Nói một cách đơn giản, các thay đổi đối với đối tượng bên trong hàm sẽ ảnh hưởng đến đối tượng ban đầu, vì cả hai đều tham chiếu đến cùng một đối tượng. Tuy nhiên, việc gán lại giá trị của biến giữ đối tượng ban đầu sẽ không ảnh hưởng đến đối tượng được tham chiếu bởi hàm. Hãy để tôi chứng minh điều này với một ví dụ

Trong ví dụ này, myObj là một đối tượng JavaScript đơn giản, được truyền dưới dạng đối số cho myFunc. Đối số obj bên trong myFunc là một tham chiếu đến cùng một đối tượng, myObj. Bất kỳ thay đổi nào được thực hiện đối với obj đều ảnh hưởng đến myObj, vì chúng là cùng một đối tượng. Điều này có nghĩa là việc gán kết quả (obj) của lệnh gọi hàm cho một biến khác, otherObj, sẽ chuyển cùng một tham chiếu đến biến đó. Kết quả là cả myObjotherObj đều tham chiếu cùng một giá trị đối tượng

Việc gán lại myObj cho một giá trị đối tượng mới hoàn toàn không ảnh hưởng đến otherObj. otherObj vẫn tham chiếu đến đối tượng ban đầu. Nếu JavaScript là tham chiếu chuyển tiếp, việc chỉ định lại myObj sẽ ảnh hưởng đến otherObj, điều này rõ ràng không phải như vậy

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ị.

Các mảng JavaScript có được chuyển qua tham chiếu không?

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

JavaScript có vượt qua không

JavaScript hoàn toàn chuyển từng giá trị .

Các loại tham chiếu JavaScript là gì?

Giá trị tham chiếu. JavaScript cung cấp ba loại giá trị Tham chiếu bao gồm Mảng, Đối tượng và Hàm .