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

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?

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, myObj là một đối tượng JavaScript đơn giản, được truyền như một đố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 chức năng cho một biến khác,

function callByValue(varOne, varTwo) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
1, sẽ chuyển cùng một tham chiếu cho biến. Kết quả là cả myObj
function callByValue(varOne, varTwo) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
1 tham chiếu cùng một giá trị đối tượng.

Việc xác định lại myObj cho một giá trị đối tượng mới hoàn toàn không ảnh hưởng đến

function callByValue(varOne, varTwo) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
1.
function callByValue(varOne, varTwo) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
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) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20
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

  • Chuẩn bị cho cuộc phỏng vấn JavaScript tiếp theo của bạn với bộ sưu tập các câu hỏi và câu trả lời phỏng vấn này.

  • Từ khóa

    function callByValue(varOne, varTwo) { 
    console.log("Inside Call by Value Method");
    varOne = 100;
    varTwo = 200;
    console.log("varOne =" + varOne +"varTwo =" +varTwo);
    }
    let varOne = 10;
    let varTwo = 20;
    console.log("Before Call by Value Method");
    console.log("varOne =" + varOne +"varTwo =" +varTwo);
    callByValue(varOne, varTwo) console.log("After Call by Value Method");
    console.log("varOne =" + varOne +"varTwo =" +varTwo);

    output will be :
    ---------------
    Before Call by Value Method
    varOne =10 varTwo =20
    Inside Call by Value Method
    varOne =100 varTwo =200
    After Call by Value Method
    varOne =10 varTwo =20
    9 của JavaScript là một nguồn gây nhầm lẫn cho nhiều người mới bắt đầu và cựu chiến binh. Tìm hiểu cách nó hoạt động trong các kịch bản khác nhau và bắt đầu sử dụng nó một cách chính xác.

  • Tạo một chức năng gọi phương thức tại một khóa nhất định của một đối tượng, tùy chọn chi tiêu bất kỳ tham số được cung cấp bổ sung nào cho các đối số.

  • Tạo một chức năng gọi

    function callByReference(varObj) { 
    console.log("Inside Call by Reference Method");
    varObj.a = 100;
    console.log(varObj);
    }
    let varObj = {a:1};
    console.log("Before Call by Reference Method");
    console.log(varObj);
    callByReference(varObj) console.log("After Call by Reference Method");
    console.log(varObj);
    output will be :
    ---------------
    Before Call by Reference Method
    {a: 1}
    Inside Call by Reference Method
    {a: 100}
    After Call by Reference Method
    {a: 100}
    0 với một bối cảnh nhất định, tùy chọn chi tiêu bất kỳ tham số được cung cấp bổ sung nào cho các đối số.

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) { 
console.log("Inside Call by Value Method");
varOne = 100;
varTwo = 200;
console.log("varOne =" + varOne +"varTwo =" +varTwo);
}
let varOne = 10;
let varTwo = 20;
console.log("Before Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);
callByValue(varOne, varTwo) console.log("After Call by Value Method");
console.log("varOne =" + varOne +"varTwo =" +varTwo);

output will be :
---------------
Before Call by Value Method
varOne =10 varTwo =20
Inside Call by Value Method
varOne =100 varTwo =200
After Call by Value Method
varOne =10 varTwo =20

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) { 
console.log("Inside Call by Reference Method");
varObj.a = 100;
console.log(varObj);
}
let varObj = {a:1};
console.log("Before Call by Reference Method");
console.log(varObj);
callByReference(varObj) console.log("After Call by Reference Method");
console.log(varObj);
output will be :
---------------
Before Call by Reference Method
{a: 1}
Inside Call by Reference Method
{a: 100}
After Call by Reference Method
{a: 100}

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.