Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cơ chế "Pass by Reference" trong JavaScript

JavaScript là pass-by-value (truyền theo giá trị). Nhưng với object, **giá trị chính là reference (tham chiếu)**.

Primitive (number, string, boolean...)

let i = 0;
function increment(x) { x = x + 1; console.log(x); }
increment(i); // 1
console.log(i); // 0 (nguyên vẹn)

→ Giá trị primitive được copy, thay đổi local không ảnh hưởng caller.

Object

let obj = { foo: 'bar' };

function updateRef(x) { x = {}; }           // gán lại reference local
function addHelloWorld(y) { y.hello = 'world'; } // mutate object

console.log(obj);           // { foo: 'bar' }
updateRef(obj);
console.log(obj);           // { foo: 'bar' } (không đổi)
addHelloWorld(obj);
console.log(obj);           // { foo: 'bar', hello: 'world' } (đã mutate)

Tóm tắt

  • Gán lại tham số (x = {}) → **không ảnh hưởng** object gốc.
  • Mutate nội dung (y.prop = val) → **ảnh hưởng** object gốc (vì cùng reference).

Đây gọi là Call by Sharing (Barbara Liskov).