Anonymous function, immediately invoked function, closure in JavaScript

2020. 4. 1. 21:56JavaScript

728x90

자바스크립트의 함수사용방법

1. 함수정의표현식(함수선언 후 호출)

2. 함수표현식(변수에 할당 가능)

  2-1. 익명함수(Anonymous function)

  2-2. 즉시실행함수(Immediately invoked function)

 

익명함수와 즉시실행함수의 목적은 무엇인가?

다른 언어에서는 반복적으로 실행되는 코드의 블록을 function으로 정의해서 사용했다.

자바스크립트에서는 함수의 블록을 통해 변수의 scope이 제어되며, 인자로서 함수를 사용하는 경우도 많다.

그래서 반복적으로 실행되는 코드보다는

일회성으로 사용되는 코드를 함수로 정의하는 경우가 많다.

이를 지원하는 방법이 익명함수, 즉시실행함수이다.

 

함수정의표현식으로 정의된 함수의 선언문은 호이스팅이 된다. 함수 선언문 위에서 함수를 호출해도 문제없이 함수가 실행된다는 뜻이다.

 

하지만 함수표현식으로 정의된 함수는 함수 선언문 위에서 호출할 수 없다. 엄밀히 말하면, 표현식으로 정의된 함수는 변수에 할당되기 전까지는 참조할 수 없다.

 

closure란?

함수객체와 함수의 변수가 해석되는 유효범위(변수 바인딩의 집합)를 아울러 컴퓨터과학문헌에서는 클로저라고 일컫는다. 기술적으로 모든 자바스크립트 함수는 클로저인데, 함수는 객체이고 함수자신과 관련된 유효범위 체인을 가지고 있기 때문이다.

 

유효범위 체인이란..... 대충 말하자면 함수 scope들끼리의 관계..

 

Dynamic scope vs Lexical scope?

변수scope에 대한 개념으로 대부분의 언어는 Lexical scope를 채택하고 있다.

쉽고 간단한 예시는 다음 링크 참고.

https://bestalign.github.io/2015/07/12/Lexical-Scope-and-Dynamic-Scope/

 

 

 

 

 

 

728x90
반응형