Làm cách nào để nhận tài liệu tham khảo trong javascript?

Bài viết này thảo luận về cách các loại dữ liệu JavaScript khác nhau hoạt động khi chúng được gán cho một biến. Tùy thuộc vào loại dữ liệu, bộ nhớ được phân bổ khác nhau để lưu trữ nó. Nó có thể dành một không gian mới để lưu trữ một bản sao của giá trị hoặc nó có thể không tạo một bản sao nào cả và chỉ trỏ đến giá trị hiện có (tham khảo)

Dưới đây là những ghi chú của tôi khi theo dõi khóa học Javascript30 của Wes Bos

Số, Chuỗi và Booleans

Trong JavaScript, Các loại nguyên thủy như

console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
8,
console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
9,
name = ‘Vinicius’;
0,
name = ‘Vinicius’;
1,
name = ‘Vinicius’;
2 và
name = ‘Vinicius’;
3 được truyền theo giá trị

let name = ‘Marina’;let name2 = name;
console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
name = ‘Vinicius’;
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
Thông qua giá trị

Khi biến

name = ‘Vinicius’;
4 được gán, một khoảng trống trong bộ nhớ có địa chỉ là
name = ‘Vinicius’;
5 được dành để lưu trữ giá trị đó. Biến
name = ‘Vinicius’;
4 sau đó trỏ đến địa chỉ đó. Biến
name = ‘Vinicius’;
7 sau đó được đặt bằng
name = ‘Vinicius’;
4. Một không gian mới trong bộ nhớ, với một địa chỉ mới
name = ‘Vinicius’;
9 được phân bổ và lưu trữ một bản sao của giá trị được lưu trữ trong địa chỉ mà
name = ‘Vinicius’;
4 trỏ tới

Vì vậy, bất cứ khi nào chúng tôi muốn sửa đổi giá trị của

name = ‘Vinicius’;
4, giá trị được lưu trữ bởi
name = ‘Vinicius’;
7 sẽ không bị thay đổi, vì đó là bản sao, được lưu trữ ở một vị trí khác

Đối tượng và Mảng

Các đối tượng trong JavaScript được truyền theo tham chiếu. Khi có nhiều hơn một biến được đặt để lưu trữ

console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
3,
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
4 hoặc
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
5, các biến đó sẽ trỏ đến cùng một không gian được phân bổ trong bộ nhớ

const animals = ['Cat', 'Dog', 'Horse', 'Snake'];
let animals2 = animals;console.log({animals, animals2});>>{  animals: ['Cat', 'Dog', 'Horse', 'Snake'],  animals2: ['Cat', 'Dog', 'Horse', 'Snake']}
animals2[3] = 'Wale';console.log(animals, animals2);>>{  animals: ['Cat', 'Dog', 'Horse', 'Wale'],  animals2: ['Cat', 'Dog', 'Horse', 'Wale']}
Thông qua tham chiếu.

Khi

console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
6 được đặt để lưu trữ một mảng, bộ nhớ được cấp phát và một địa chỉ được liên kết với biến đó. Sau đó,
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
7 được đặt bằng
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
6. Vì
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
6 lưu trữ một mảng, thay vì tạo một bản sao của mảng đó và một địa chỉ mới trong bộ nhớ,
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
7 chỉ đơn giản được trỏ đến cùng một đối tượng trong địa chỉ hiện có. Bằng cách đó, bất kỳ thay đổi nào được thực hiện đối với
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
7 sẽ phản ánh trên
console.log({name, name2});>> { name: ‘Vinicius’, name2: ‘Marina’ }
6, vì chúng trỏ đến cùng một vị trí

Bạn sẽ thấy hành vi tương tự đối với các đối tượng

const person = {  name: 'Marina',  age: 29};
let femme = person;femme.age = 18;
console.log({person, femme});>>{  person: { name: 'Marina', age: 18 },  femme: { name: 'Marina', age: 18 }}

Sao chép đối tượng và mảng

Vì một nhiệm vụ đơn giản là không đủ để tạo ra một bản sao của một đối tượng, điều đó có thể đạt được bằng các phương pháp khác

Mảng

lát cắt()

console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
0

concat()

console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
1

lây lan (ES6)

console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
2

Các thay đổi sẽ chỉ ảnh hưởng đến đối tượng được sửa đổi

console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
3

Các đối tượng

giao phó()

console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
4_______0_______5

bản sao sâu

Điều quan trọng cần lưu ý là những phương pháp đó chỉ sâu một cấp độ. Đối với các bản sao sâu, có một phương pháp được tán thành. Sử dụng cẩn thận

console.log({name, name2}); >> { name: ‘Marina’, name2: ‘Marina’ }
6_______0_______7

Người giới thiệu

  • WesBos - Javascript 30
  • Bạn không biết JS. Phạm vi & Đóng cửa của Kyle Simpson

Được xuất bản lần đầu tại marina-ferreira. github. io

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Nếu bài viết này hữu ích, hãy tweet nó

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

JavaScript có tham chiếu không?

Tham chiếu JavaScript đóng vai trò là kho lưu trữ dữ kiện về ngôn ngữ JavaScript . Toàn bộ ngôn ngữ được mô tả chi tiết ở đây. Khi bạn viết mã JavaScript, bạn sẽ thường xuyên tham khảo các trang này (do đó, tiêu đề là "Tham khảo JavaScript").

Thẻ tham chiếu trong JavaScript là gì?

Nhận xét “tham chiếu” cho phép bạn “xem” các chức năng và đối tượng bên ngoài tệp hiện tại của bạn trong danh sách hoàn thành .