자바스크립트 기초 7

공부는 혼자하는 거·2021년 5월 3일
0

클로저

함수는 초기화가 바로 되므로 사용가능. 변수에 할당한 함수값은 바로 초기화가 안 됨.

흐름을 살펴보자 addOne에 5라는 인자값을 넘겨주고 실행이 되며 내부 Lexical 환경에서, num이라는 변수가 생성. 내부 Lexical 환경은 외부 Lexical 환경을 참조하는데, 만약 one이라는 변수가 내부에 있으면 얘를 쓰고, 아니면 계속 외부로 타고 올라감.

정리하자면
1. 자바스크립트는 함수 안에서 또 다른 함수를 선언 할 수 있다.
2. 내부함수는 외부함수의 지역변수에 접근할 수 있는데, 외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근할 수 있다.
3. 위의 예제를 보면 같은 외부함수의 변수를 공유하는 add10과 add3이 서로 영향을 받지 않는 것을 볼 수 있다.
4. 것은 외부함수가 실행될 때마다 새로운 지역변수를 포함하는 클로저가 생성되기 때문에 서로 독립된 변수나 객체가 생성된다.
5. JavaScript는 기본적으로 Private한 속성을 지원하지 않는데, 클로저의 이러한 특성을 이용해서 Private한 속성을 사용할 수 있게된다.

function outter(){
    var title = 'coding everybody';  
    return function(){        
        alert(title);
    }
}
inner = outter();
inner();

예제의 실행순서를 주의깊게 살펴보자. 7행에서 함수 outter를 호출하고 있다. 그 결과가 변수 inner에 담긴다. 그 결과는 이름이 없는 함수다. 실행이 8행으로 넘어오면 outter 함수는 실행이 끝났기 때문에 이 함수의 지역변수는 소멸되는 것이 자연스럽다. 하지만 8행에서 함수 inner를 실행했을 때 coding everybody가 출력된 것은 외부함수의 지역변수 title이 소멸되지 않았다는 것을 의미한다. 클로저란 내부함수가 외부함수의 지역변수에 접근 할 수 있고, 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미한다.

setTimeout / setInterval

setTimeout은 일정시간이 지난 후 함수를 실행 setInterval은 일정시간 간격으로 함수를 반복한다.

clearTimeout

clearTimeout은 예정된 작업을 없앨 수 있다. setTimeout은 TimeId를 반환하는데 이를 이용해 작업을 소멸시킬 수 있음.

setIntervale도 setTimeout과 사용방식이 동일, 중간에 중단할려면 clearInterval을 실행

주의할 점은 delay 시간을 0을 줘도 바로 실행되는 건 아님. 기본적으로 스케줄링 함수는 스크립트가 다 실행된 이후 실행됨.

실행 예시

profile
시간대비효율

0개의 댓글