-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
안녕하세요 클로저의 응용 수업 관련하여 질문 드립니다
20.02.11 00:00 작성 조회수 126
0
for (var i = 0 ; i < 5 ; i++) {
arr[i] = function () {
return i;
}
부분에서 궁금한 점이 있습니다
3번째 줄의 i는 for문의 i를 왜 받지 못하나요?
for문의 i는 전역변수이고, 함수 안의 i를 리턴하기 위해선, 컴퓨터가 전역변수 i의 값을 찾고, 받아야 한다고 생각했습니다.
어떠한 부분을 제가 잘못 생각하고 있는 건지, 도움 주시면 감사하겠습니다.
답변을 작성해보세요.
2
박민상
2020.02.20
클로저 강의를 듣고 저도 비슷한 고민을 했었기에 제가 이해했던 걸 적어드립니다.
3번째 줄의 i는 for문의 i를 받고 있는게 맞습니다.
강의를 보면 저 for문 작성 이후에 arr[0]~arr[4]를 출력을 하는데 모두 5가 나오죠?
i값이 5이기 때문입니다. (i는 for문에서 5회 반복되었습니다.)
작성자님은 아마 for문을 보면서
arr[0] = function(){return 0;}
arr[1] = function(){return 1;}
arr[2] = function(){return 2;}
arr[3] = function(){return 3;}
arr[4] = function(){return 4;}
를 기대하셨을것 같은데
arr[0] = function(){return i;}
arr[1] = function(){return i;}
arr[2] = function(){return i;}
arr[3] = function(){return i;}
arr[4] = function(){return i;}
이렇게 이해하는게 맞는 것 같습니다.
왜 이렇게 되는지 생각해 봤는데
arr[i]처럼 배열 인덱스에서는 i가 가진 정수 값이 들어가고
return i; 일때는 i라는 변수 그 자체, 주소값이 리턴되어서 그런것 같습니다.
답변 1