inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

생활코딩 - 자바스크립트(JavaScript) 기본

클로저의 응용

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

217

devsn

작성한 질문수 35

0

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

    arr[i] = function () {

        return i;

    }

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

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

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

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

javascript

답변 1

2

박민상

클로저 강의를 듣고 저도 비슷한 고민을 했었기에 제가 이해했던 걸 적어드립니다.

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

강의 교안은 따로 없을까요?

0

207

1

배열관련 질문드립니다.

0

345

2

제발 도와주세요

-4

928

1

괄호 질문

0

423

1

new 를 안 붙이는 경우 (섹션19)

0

355

1

무한루프

1

1210

1

혹시 교재는 따로 없을까요?

0

685

0

선생님과 접점을 찾았어요.

0

456

0

new 생성자

0

262

0

sample파일에서 질문있습니다.

3

418

1

password == '111111'

0

510

1

배열

0

281

1

toUpperCase() 에 대해서 질문입니다.

0

251

0

강의를 들으면서 비쥬얼스튜디오 코드를 사용하여도 상관 없을까요?

0

623

2

\'와 변수를 같이 쓰면 안 되나요?

0

336

2

왜 에러가 났는지

0

352

1

첫번째 for문에서 i값 5가 5번 출력 되는 이유

0

502

3

name이 뭐죠

0

275

1

첫번째 예시문에서 값이 왜 5가 5번 반복되는지 궁금합니다.

0

700

3

grades 객체에 key값 show의 function을 지정하는 지점에서 오류가 발생합니다.

0

295

1

function오류

0

392

1

객체 출력차이(document.write, console.log)

0

313

0

자바스크립트에서 함수가 아닌 곳에서 정의된 변수

0

190

0

동일한 이름의 전역변수 선언이 가능한가요

1

742

1