Javascript – Pass by value and pass by reference

Javascript – Pass by value and pass by reference

Như bài trước mình cũng đề cập đến chủ đề này nhưng trong PHP giờ mình sẽ tiếp tục nói về nó nhưng với Javascript.

Trong Javascript hơi khác với PHP. Bạn nào chưa đọc bài của mình về PHP thì có thể click vào đây Pass By Value And Pass By Reference In PHP

Pass By Value:
Trong Pass by Value, Function sẽ truyền trực tiếp giá trị của variable(biến) làm argument(đối số) thay đổi argument sẽ không thể thay đổi giá trị của variable bên ngoài funtion.

Javascript always pass by value: Javascript luôn luôn truyền giá trị vào function nên thay đổi giá trị của biến bên trong function sẽ không làm thay đổi giá trị nguyên thuỷ của nó (the underlying primitive (String or number) ). Cái này mình đã giải thích ở bài trên nhưng mình sẽ giải thích thêm ở đây:
Lý do là bởi vì khi khởi tạo giá trị của biến thì nó được cấp 1 vùng để lưu trong bộ nhớ (Ở đây là Ram) nhưng ở trong function nó sẽ lưu ở một trỗ khác chứ không phải trỏ đến nơi lưu giá trị ban đầu của variable. Khi function kết thúc thì bộ nhớ của variable trong function được giải phóng, variable vẫn dùng lại giá trị ban đầu của nó.
Ví dụ:


const setValueForParams = (paramOne, paramTwo) => {
    console.log("Insite function and before set: ");
    console.log("Param One " + paramOne + " and Param Two " + paramTwo);
    paramOne = 100;
    paramTwo = 200;
    console.log("Insite function and after set: ");
    console.log("Param One " + paramOne + " and Param Two " + paramTwo);
}

var paramOne = 10;
var paramTwo = 20;
setValueForParams(paramOne, paramTwo);
console.log("Outsite function and after set: ");
console.log("Param One " + paramOne + " and Param Two " + paramTwo);

Output sẽ là:


Insite function and before set: 
Param One 10 and Param Two 20
Insite function and after set: 
Param One 100 and Param Two 200
Outsite function and after set: 
Param One 10 and Param Two 20

Nhưng khi variable refer đến một object (hoặc arrays) thì giá trị của variable sẽ reference đến object (hoặc mảng) đó.

Pass by Reference:

Trong Pass by Reference, Function được gọi bằng các truyền trực tiếp reference/address của biến như là argument. Thay đổi agrument bên trong function sẽ thay đổi biến được truyền vào từ bên ngoài function. Trong javascript object và arrays luôn pass by reference.

Ví dụ:


const setValueForObject = (paramObject) => { 
  console.log("Inside Call by Reference Method"); 
  paramObject.number = 100; 
  console.log(paramObject); 
} 
let paramObject = {number:10};
console.log("Before Call by Reference Method"); 
console.log(paramObject);
callByReference(paramObject) 
console.log("After Call by Reference Method"); 
console.log(paramObject);
output will be : 
--------------- 
Before Call by Reference Method 
{number: 10} 
Inside Call by Reference Method 
{number: 100} 
After Call by Reference Method 
{number: 100}

Kết luận: Nếu bạn muốn thay đổi giá trị của một variable bên trong function và bên ngoài function giá trị của variable vẫn thay đổi thì bạn có thể dùng object hoặc arrays. Mình đã dùng cách đó nếu bạn có ý tưởng gì hay thì comment cho mình biết nhé 😉

Leave a Reply

Close Menu