챕터 17 배열 강의 듣는 중에 궁금한게 있습니다.

위처럼 콘솔찍었을때,
22번째 콘솔에서 arrC 배열 요소를 보면 0번쨰 인덱스에 "hellooo?"가 출력됩니다. 그러나 그다음 콘솔에서는 0번째 인덱스가 1로 찍힙니다.
29번째 줄에서 arrC 배열의 0번째 인덱스를 "hellooo?"로 수정한 것이 22번째줄 콘솔에서 보여지는 것 같은데, 실질적인 값은 무엇인지, 이런건 자바스크립트 자체 오류인건지 아니면 원리가 따로 있는지 궁금합니다.
답변 2
1
안녕하세요 이정환입니다.
요 현상은 콘솔이 값의 변화를 실시간으로 반영하기 때문에 발생하는 문제로 보입니다. 자바스크립트의 console.log()는 호출 시점의 값을 즉시 복사해서 출력하는 것이 아니라, 객체나 배열처럼 참조형 데이터의 경우 나중에 값이 바뀌면 콘솔에서도 그 최종 상태를 보여줍니다. 그래서 console.log(객체)를 해놓고 나중에 그 객체를 수정하면, 콘솔에 찍힌 값도 수정된 상태로 보일 수 있어요.
그런데 반복문 안에서 console.log()를 찍은 경우에는 조금 다르게 동작하는데요, 반복문의 중괄호 {}는 새로운 블록 스코프를 형성하기 때문에 그 시점의 참조나 상태가 일시적으로 고정됩니다. 그래서 반복문 안에서 찍은 콘솔은 그 당시 상태 그대로 찍히고, 외부에서 찍은 콘솔은 나중에 바뀐 값이 반영되어 보이는 거죠.
0
안녕하세요, 인프런 AI 인턴입니다. 낙희님.
JavaScript에서 배열을 수정하고 콘솔에 출력을 할 때, 배열의 내부 상태가 어떻게 변동되는지에 대해 궁금하신 것 같습니다. 배열이나 객체를 콘솔에 출력할 때 가장 흔히 겪을 수 있는 오해 중 하나는, 브라우저의 콘솔이 객체의 현재 상태를 참조(reference)를 통해 실시간으로 보여주는 기능 때문입니다.
질문에서 말씀하신 “콘솔에서 배열의 0번째 인덱스가 다르게 찍힌다”는 부분은 이런 동작에서 비롯된 것으로 보입니다.
JavaScript 객체와 배열 참조
객체와 배열은 참조(reference) 타입: JavaScript에서 객체와 배열은 참조 타입입니다. 즉, 변수에 객체나 배열을 할당하고, 그 변수를 콘솔에 출력하면 그 객체나 배열의 ‘참조’를 출력하게 됩니다. 객체나 배열의 상태가 나중에 변경되면, 콘솔에 보이는 값도 실시간으로 변경된 상태를 반영합니다.
콘솔의 실시간 반영 기능: 브라우저의 콘솔에서 객체나 배열을 출력했을 때, 그 시점 이후에 객체나 배열이 변경되면 콘솔에 보이는 값도 바뀌게 됩니다. 이는 밤새도록 진행 중인 디버깅 과정에서 최신 상태를 반영하기 위해 설계된 기능입니다.
질문자의 경우, 아마도 배열의 첫 번째 요소를 "hellooo?"로 수정하고 콘솔에 배열을 출력했을 때, 이 후 다른 부분에서 해당 요소의 값이 변경되었다면 콘솔에 반영된 상태임을 주의하셔야 합니다.
참고 링크
위 링크는 비슷한 JavaScript 배열 및 객체 참조 문제와 관련된 게시글들입니다. 각각의 사례를 참고하면서 JavaScript에서의 참조 타입 동작에 대한 이해를 높이시는 것도 좋습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
useEffect와 lifecycle문의
0
31
2
프론트엔드 학습 수준 문의
0
43
2
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
51
2
데이터 로딩중 화면만 계속 나와요!!
0
56
2
퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요
0
80
2
이후의 커리큘럼 문의
0
102
2
실슬환경 설정에서 save후 console.log 부분이 새로고침이 안되는현상입니다.
0
50
2
최적화 관련 질문있습니다 (useMemo 등)
0
85
3
프로바이더 컴포넌트의 위치는 어떤 기준인가요?
1
82
3
Date 객체에 관련하여 질문드립니다.
0
85
2
리액트 개정판 교재 질문
0
60
2
예제코드가 안나와요!
0
78
2
select a variant 선택에서 javascript와 javascript+react compiler 중 무엇을 선택해야하나요? com
0
109
2
onMouseEnter 관련 문의 드립니다
0
93
3
배열의 렌더링 관련 질문 드립니다.
0
73
2
2:40초 refObj를 콘솔로 출력시 오류가 발생합니다.
0
113
2
TS, 리액트 강의중에 뭘 먼저 수강하는게 좋을까요?
0
137
2
useCallback 적용한 onCreate, onUpdate, onDelete 함수..
0
71
1
vs code 자동완성관련 문의
0
113
2
91강 useEffect내에서 상태변화함수 호출시 발생하는 에러
1
181
2
87강 필터 함수 질문
0
69
2
useRef, useState count 비교
0
67
2
안된다고했던 이유가 무엇이었는지 모르겠습니다
0
91
2
85강에서 객체를 왜 클래스로 만들어서 new 하지 않는건지 궁금합니다.
0
76
2





