• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요 클로저의 응용 수업 관련하여 질문 드립니다

20.02.11 00:00 작성 조회수 120

0

for (var i = 0 ; i < 5 ; i++) {

    arr[i] = function () {

        return i;

    }

부분에서 궁금한 점이 있습니다

3번째 줄의 i는 for문의 i를 왜 받지 못하나요?

for문의 i는 전역변수이고, 함수 안의 i를 리턴하기 위해선, 컴퓨터가 전역변수 i의 값을 찾고, 받아야 한다고 생각했습니다.

어떠한 부분을 제가 잘못 생각하고 있는 건지,  도움 주시면 감사하겠습니다.

답변 1

답변을 작성해보세요.

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라는 변수 그 자체, 주소값이 리턴되어서 그런것 같습니다.