전역(윈도우)변수는 메모리를 계속 까먹는다.
그래서 즉시실행 함수로 만든다. 즉시실행함수는 누군가 호출을 안 해도 바로 실행하는 함수다.
실행된 결과값을 함수한테 준다. 함수의 결과값은 return으로 표현될 수 있다. 

함수 안에 함수를 만들면 내부함수이다. 중첩함수라고도 한다.

Q.외부함수에서 내부함수에 접근할 수 있는 방법은?

A.없다.


즉시실행함수방식과 객체리터럴방식의 호출방식은 같다.
다만, 객체리터럴방식은 자기 클래스나 메서드를 호출하려면 this를 사용해 해당 프로퍼티에 직접 접근한다. 

마치, 자바에서 public으로 접근하는 것과 같다.

Q. 지역변수는 언제 생성될까?   
A.  호출함수가 즉시실행함수를 호출할 때마다 지역변수가 생성된다. 

  호출함수가 호출하면 메모리에 올라가고 함수가 끝날때 가비지 컬렉션이 지운다.
  함수 안에 있는 지역변수도 마찬가지이다.
  반면에, 객체 리터럴함수는 한번 만들어줘서 인스턴스를 생성하지 않는다.
 
메모리에 함수가 올라가는 것을 유효범위체인이라고 한다.
메모리는 원래 함수가 끝나면 지워지는데 나를 "원하는 곳"이 있으면 안 없어진다. 

원하는 곳이란 return이 선언되어있는 것을 말한다.
이 현상을 "클로저" 라고 한다.
 
하나의 함수에 내부함수 두 개가 있고 내부함수가 프로퍼티에 있어서 메서드가 되었다. 

return에서 지역함수를(호출한 놈을) 가리키고 있기 때문이다. 이것을 "클로저" 라고한다.
내부함수에서 외부함수의 변수를 사용할 수 있는 현상이다.
지역변수는 비공개 맴버다. 내부함수는 특권메서드라고 한다.

내부함수가 외부함수, 지역함수를 바라보면 return이 있건 없건 "클로져"현상이 일어난다. 

자신을 참조하고 있기 때문에 생존하고 있다.

즉시실행함수가 객체리터럴보다 좋은 이유는 
즉시실행함수는 private이고 static을 사용한다.
객체리터럴함수는 public이고 static을 사용하지 않는다.

 

 

출처 :  한큐의 자바 수강내용

+ Recent posts