강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của gimdongjun33160621
gimdongjun33160621

câu hỏi đã được viết

Giới thiệu về giải quyết vấn đề thuật toán JavaScript (chuẩn bị cho bài kiểm tra mã hóa)

안녕하세요. 배열 앝은 복사 관련 질문드립니다.

Viết

·

264

0

수업 설명에서 아래 코드와 같이 배열을 복사했을때 주소값을 복사하는 것이기 때문에 두개의 변수를 출력했을때 같다고 하셨습니다. 

하지만 실행했을 때 사진과 같이 나오는데 이유가 뭘까요..? ㅠ

let arr=[];
let answer = arr;
console.log(answer);
console.log(arr);
arr = [12345]
console.log(answer);
console.log(arr);
>>>결과 console
배열코테 준비 같이 해요! 얕은복사javascript

Câu trả lời 2

2

arr를 재할당해서 그렇습니다.

처음 arr = [1,2,3,4,5] 와 answer는 같은 참조값을 가지고 있기때문에 서로 값이 공유되지만,
arr 를 새로운 값으로 할당한 경우 arr는 새로운 참조값을 갖게되는 반면 answer는 여전히 [1,2,3,4,5]를 참조하고 있습니다. 

arr = [1,2,3] 으로 새로운 값을 할당하는것이 아니라 arr.pop() 혹은 arr.shift() 를 했을 경우엔 answer역시 arr와 같은 값을 가지는 것을 볼 수 있습니다. 

혹은 arr = [1,2,3] 로 재할당한 이후에 다시 answer = arr로 해주게되면 answer역시 [1,2,3]으로 다시 같은값을 공유하게 됩니다. 

해당개념의 경우엔 가비지컬렉션을 같이 살펴보시면 좋을거 같아요

https://ko.javascript.info/garbage-collection

* 혹시라도 제가 틀렸을경우엔 올바르게 지적 부탁드립니다 *_*

gimdongjun33160621님의 프로필 이미지
gimdongjun33160621
Người đặt câu hỏi

완전 이해했습니다! 감사합니다

1

codingcamp님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

안녕하세요^^

위에분 juuu o 님의 말씀대로 입니다.

let arr=[] //빈배열의 주소값 100번지가 할당됩니다.

answer=arr //answer도 100번지를 참조합니다. arr과 answer는 같은 곳을 참조하는 상황입니다.

arr=[1, 2, 3, 4, 5] //arr에 새로운 배열 [1, 2, 3, 4, 5]의 주소인 200번지가 할당됩니다.

여기까지의 상황은 arr은 200번지를 참조하고 있고, answer는 여전히100번지를 참조하고 있는 상황입니다.

gimdongjun33160621님의 프로필 이미지
gimdongjun33160621
Người đặt câu hỏi

친절한 설명 감사합니다!

Hình ảnh hồ sơ của gimdongjun33160621
gimdongjun33160621

câu hỏi đã được viết

Đặt câu hỏi