Hướng dẫn are javascript objects passed by value or pass by reference? - các đối tượng javascript được truyền bằng giá trị hay truyền bằng tham chiếu?
Bắt đầu nội dung chính Show
JavaScript luôn luôn qua giá trị. Đ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ố chức năng luôn được truyền bởi 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 ở thực tế là các loại đối tượng là các loại tham chiếu được truyền theo giá trị. Thật kỳ lạ như âm thanh này, một tham chiếu đến một đối tượng được truyền đến 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 bằng 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 gốc, vì cả hai đều đề cập đến cùng một đối tượng. Tuy nhiên, việc chỉ định 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 bằng một ví dụ: let myObj = { a: 1 }; const myFunc = obj => { obj.a++; return obj; } let otherObj = myFunc(myObj); myObj; otherObj; myObj === otherObj; myObj = { a: 4, b: 0 }; myObj; otherObj; myObj === otherObj; Trong ví dụ này, function callByValue(varOne, varTwo) {1, sẽ chuyển cùng một tham chiếu cho biến. Kết quả là cả myObj và function callByValue(varOne, varTwo) {1 tham chiếu cùng một giá trị đối tượng. Việc xác định lại function callByValue(varOne, varTwo) {1. function callByValue(varOne, varTwo) {1 vẫn tham khảo đối tượng ban đầu. Nếu JavaScript được tham chiếu từng lần, việc chỉ định lại myObj sẽ ảnh hưởng đến function callByValue(varOne, varTwo) {1, điều này rõ ràng không phải là trường hợp. Đoạn trích và bộ sưu tập được đề xuất
Trong bài đăng này, chúng tôi sẽ xem xét vượt qua giá trị và vượt qua tham chiếu trong JavaScript. Hãy cùng xem những gì được truyền qua giá trị và vượt qua tham chiếu trước khi xem xét bối cảnh JavaScript của nó. Vượt qua giá trị:Trong Pass by giá trị, 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ố. 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 vượt qua giá trị để thay đổi giá trị của biến không bao giờ thay đổi nguyên thủy cơ bản (chuỗi hoặc số). so changing the value of the variable never changes the underlying primitive (String or number). function callByValue(varOne, varTwo) { Tuy nhiên, khi một biến đề cập đến một đối tượng bao gồm mảng, giá trị là tham chiếu đến đối tượng. Vượt qua tham chiếu:Trong tham chiếu vượt qua, 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 theo sau vượt qua tham chiếu. function callByReference(varObj) { Vì vậy, nếu chúng ta chuyển đối tượng hoặc mảng làm đối số cho phương thức, thì có khả năng giá trị của đối tượng có thể thay đổi. Nếu bạn muốn tạo trang web hoặc cổng thông tin - liên hệ với chúng tôi @ https://www.bondesk.in Đối tượng JavaScript là tham chiếu hoặc giá trị?JavaScript luôn luôn qua giá trị. Đ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ố chức năng luôn được truyền bởi giá trị.pass-by-value. This means everything in JavaScript is a value type and function arguments are always passed by value.
Làm thế nào các đối tượng được truyền trong JavaScript?Các đối tượng được truyền bằng tham chiếu trong JavaScript, tham chiếu đối tượng là các giá trị. Bởi vì điều này, các đối tượng sẽ hoạt động giống như chúng được thông qua bởi tham chiếu: nếu một hàm thay đổi thuộc tính đối tượng, nó sẽ thay đổi giá trị ban đầu. Các thay đổi đối với các thuộc tính đối tượng có thể nhìn thấy (phản xạ) bên ngoài hàm.by Reference
In JavaScript, object references are values. Because of this, objects will behave like they are passed by reference: If a function changes an object property, it changes the original value. Changes to object properties are visible (reflected) outside the function.
Tại sao các đối tượng được truyền bởi tham chiếu trong JavaScript?Có vẻ như JavaScript chuyển một đối tượng bằng cách tham chiếu vì sự thay đổi đối với đối tượng được phản ánh bên ngoài hàm.Tuy nhiên, đây không phải là trường hợp.Trong thực tế, khi chuyển một đối tượng cho một hàm, bạn đang chuyển tham chiếu của đối tượng đó chứ không phải đối tượng thực tế.because the change to the object is reflected outside the function. However, this is not the case. In fact, when passing an object to a function, you are passing the reference of that object, not the actual object.
Đối tượng có thể được truyền làm tài liệu tham khảo không?Khi một đối tượng (hoặc loại tích hợp) được truyền bằng cách tham chiếu đến một hàm, đối tượng bên dưới không được sao chép.Hàm được cung cấp địa chỉ bộ nhớ của chính đối tượng.Điều này tiết kiệm cả chu kỳ bộ nhớ và CPU vì không có bộ nhớ mới được phân bổ và không có bộ xây dựng sao chép (đắt tiền) đang được gọi.. The function is given the memory address of the object itself. This saves both memory and CPU cycles as no new memory is allocated and no (expensive) copy constructors are being called. |