Các ví dụ cơ bản:Hoạt động gán của Javascript là sao chép tài liệu tham khảo?
var b = 10;
var c = b;
b++;
console.log(b,c);
>> 11 10
c
trông giống như một bản sao của b
.
Nhưng trong trường hợp khác:
var x = {};
var y = x;
x.abc = 10;
console.log(x.abc, y.abc);
>> 10 10
Tại sao y
không phải là một bản sao của x
, nhưng một tài liệu tham khảo mà chỉ vào cùng một ví dụ x
điểm đến?
Ngoài ra, tôi đoán b++
tạo một phiên bản khác, vì vậy, b
trỏ đến phiên bản mới nhưng c
trỏ đến phiên bản cũ. Tuy nhiên ...
var u = 10;
setTimeout(function() {
console.log(u);
}, 10000)
u++;
>> 11
Nếu u++
tạo ra một trường hợp mới, sau đó các u
bên trong hàm nặc danh phải trỏ đến cũ u
, nên không?
câu cuối cùng của bạn –
@Quentin: do đó, "đối tượng" ban đầu chỉ nằm ở đâu đó trong 'đối tượng kích hoạt' hoặc 'môi trường từ vựng' được tạo bởi thực thi js (ES3/5) và không bao giờ thực sự bị xúc động bởi E Bản thân CMAscript. – jAndy
"Cả hai đều là tham chiếu đến cùng một giá trị bất biến". Điều đó không mâu thuẫn với đầu ra quan sát được "11 10"? Đầu ra sẽ gợi ý rằng chúng là tham chiếu đến các giá trị khác nhau – Neptilo