함수 호출(Call, Invoke)

- 자바 스크립트는 오버로딩 발생 X 

- 이름으로만 호출한다.

- arguments(유사 배열 객체)라는 내부 객체를 통해서 인자의 개수가 달라도 호출이 가능하다. 

- return 값이 없으면 undefined가 출력된다.


즉시 실행 함수 IIFE(Immediately Invoked Function Expression)

- 함수를 선언함과 동시에 호출한다.

- 함수와 호출이 분리되어 있는 것이 아니라 합쳐져 있다. -> 재사용 불가능

- 즉시 실행 함수는 재활용이 불가능하기 때문에, 주로 익명함수 사용

- 전역변수를 최소화 하기 위해서 사용한다.

ex. 사용 예시 

- 파일1에서 사용한 변수를 파일2에서 똑같은 변수로 사용하려면 에러가 발생할 수 있다. 

- 즉시 실행 함수를 사용하면, 각각 지역 변수로 사용할 수 있기 때문에 스코프 충돌이 일어나지 않는다.

 

전역 변수

- 애플리케이션 생명 주기와 같기 때문에 메모리 차지의 위험성이 있다.

- 가독성이 나빠진다.

- 메모리의 리소스를 너무 많이 소모한다. (실행이 끝나기 전까지 차지하고 있기 때문에 가비지 컬렉터로 제거 불가능)

- 전역변수로 사용하게 되면, 다른 파일들과 메모리 공간을 공유하기 때문에 변수 충돌의 위험성이 존재한다. 

- 즉시 실행 함수로 전역 변수의 사용을 줄일 수 있다.


중첩 함수(nested function)

- 함수안에 함수가 있는 것

- 중첩 함수를 가지고 있는 바깥 함수를 외부 함수(outer function)이라고 한다.

 

 

스코프 체인(Scope Chain)

- 해당 코드의 유효 범위(스코프) 안에 있는 변수를 정희하는 객체의 체인이다.

 

ex. inner 함수 내에 있는 y를 찾기 위해서 해당 범위인 inner 함수에서 y를 찾는다.

- y가 없기 때문에, 상위 스코프인 outer 함수에서 y를 찾는다.

- 없으면, global 스코프로 가서 y를 찾는다.

- 주의할 점 : global에 변수를 사용하면, 프로그램의 성능이 느려질 수 있다. 

 

스코프(Scope)

- 식별자가 유효한 범위

- block level scope : 자바스크립트에서는 모든 블록(if, for, while, try/catch)이 지역 스코프를 만든다.

- function level scope : var 키워드로 선언된 변수는 함수 코드 블록만 지역 스코프로 만든다.

- 자바 스크립트 엔진이 식별자를 판단할 때 어떤 메커니즘으로 판단하는지? -> 스코프 체인(Scope Chain)

- 동적 스코프(Dynamic Scope) : 어디에서 호출하냐에 따라 스코프가 바뀐다.

- 정적 스코프(Static Scope), 렉시컬 스코프(Lexical Scope) : 호출은 상관 없지만, 어디에서 정의되는지에 따라 스코프가 바뀐다. -> 거의 대부분 언어가 사용

+ Recent posts