Javascript 기초지식 쌓기
Contents
자바스크립트 기초 지식 쌓기
아래의 코드가 있다고 가정하자.
|
|
- 함수 안에 함수가 있을 때 응집성이 높아진다.
- 위의 코드를 보면 out()은 외부함수, in()은 내부함수를 말한다.
- in()함수에서 name에 대한 로그를 찍는데, name은 out()에만 있기 대문에 외부 함수에서 변수를 찾는다. 이를 closure라고 한다.
Closure 클로저
내부 함수에서 외부 함수의 지역 변수에 접근하는 것
위의 코드를 보면 외부함수 안에 지역변수가 있고, return 값은 내부함수임을 알 수 있다. 내부 함수 안에서 console.log가 나온다.
in은 out()의 리턴값이다. 즉 아래 소스코드와 같다.
함수를 호출하면 ‘aaa’가 출력된다. 여기서 out()은 내부함수를 return하는 동시에 종료됐다. 하지만 in()을 호출하면 out(), 외부 함수에 존재하는 지역 변수를 가져왔다. 외부함수가 종료된 이후에도 내부함수를 통해 변수에 접근할 수 있는 것이 클로져의 특성이다.
지역 변수
return 값 = 객체. 객체는 get_food, set_food라는 키(메서드)를 가지고 있고, 이 메서드들은 내부함수이다.
get_food의 value는 food를 리턴하는 함수이다. get_food 메서드를 호출하면 지역변수에 접근할 수 있다. set_food의 _food는 내부 변수를 지칭한다. meal 함수는 return하는 동시에 종료되어, meal의 지역변수는 내부 함수를 통해서만 접근 가능하다.
클로져 응용
var로 변수를 선언했을 때와 let으로 선언했을 때 출력값이 다르다.
- var로 선언했을 때
처음 위의 코드를 봤을 때,
- console.log(arrindex) ; 의 결과값은 0 1 2 3 4 일 것이라고 생각했다.