Vì vậy, tôi đã chơi xung quanh một ngày chỉ để xem chính xác cách phân công khối lượng hoạt động trong JavaScript.
Đầu tiên, tôi đã thử ví dụ này trong bảng điều khiển:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
Kết quả là "thanh" được hiển thị trong một cảnh báo. Điều đó là đủ công bằng, avà bthực sự chỉ là bí danh cho cùng một đối tượng. Sau đó, tôi nghĩ, làm thế nào tôi có thể làm cho ví dụ này đơn giản hơn.
a = b = 'foo';
a = 'bar';
console.log(b);
Đó là điều khá giống nhau, phải không? Lần này, nó trả về fookhông barnhư tôi mong đợi từ hành vi của ví dụ đầu tiên.
Lý do tại sao điều này xảy ra?
NB Ví dụ này có thể được đơn giản hóa hơn nữa với đoạn mã sau:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(Tôi nghi ngờ rằng JavaScript xử lý các nguyên hàm như chuỗi và số nguyên khác với mã băm. Hàm băm trả về một con trỏ trong khi các nguyên hàm "cốt lõi" trả về một bản sao của chính chúng)