함수 호출(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) : 호출은 상관 없지만, 어디에서 정의되는지에 따라 스코프가 바뀐다. -> 거의 대부분 언어가 사용
'프로그래밍 > JS' 카테고리의 다른 글
[JavaScript] 실행 컨텍스트, 렉시컬 환경, 클로저 (0) | 2022.07.05 |
---|---|
[JavaScript] 일급 객체, 콜백 함수, 고차 함수 (0) | 2022.07.05 |
[JavaScript] 자바스크립트 함수, 함수 정의방법(선언문, 표현식, 화살표) (0) | 2022.07.05 |
[JavaScript] 원시 값과 객체, 유사 배열 객체 (0) | 2022.07.05 |
[JavaScript] 자바스크립트 객체와 프로퍼티 (0) | 2022.07.05 |