자바스크립트 코어 공부
즉시실행 함수 (IIFE)
함수 정의와 동시에 즉시 호출되는 함수를 즉시 실행 함수라고 합니다 . 즉시실행 함수는 단 한번만 호출되며 다시 호출할수 없습니다 .
(function(){
var a =3;
var b =5;
return a * b;
}());
즉시 실행 함수는 함수 이름이 없는 익명 함수를 사용하는것이 일반적입니다 .
함수 이름이 있는 기명 즉시실행 함수도 사용할수 있지만 , 즉시실행함수를 다시 호출할수는 없습니다 .
즉시 실행 함수는 반드시 그룹 연산자(...)로 감싸야 합니다 .그렇지않으면 에러가 발생합니다 .
콜백 함수
함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수
고차 함수
매개 변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수
콜백 함수는 고차 함수에 의해 호출
스코프
스코프란 ?
스코프(유효범위)는 자바스크립트를 포함한 모든 프로그래밍 언어의 기본적이며 중요한 개념입니다 .
모든 식별자 (변수이름 ,함수이름 , 클래스이름 등) 는
자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정됩니다.
이 유효 범위를 스코프라고 합니다 .
var x = 'global;'
function foo() {
var x ='local'
console.log(x); 1
}
foo();
console.log(x); 2
코드의 가장 바깥 영역과 foo 함수 내부에 같은 이름을 갖는 x 변수를 선언했고 1 , 2 에서 x 변수를 참조합니다 .
이때 자바스크립트 엔진은 이름이 같은 두개의 변수 중에서 어떤 변수를 참조해야 할 것일지를 결정해야 합니다 .
이를 식별자 결정 이라고 합니다 .
자바스크립트 엔진은 스코프를 통해 어떤 변수를 참조해야 할것인지 결정합니다 .
따라서 스코프란 자바스크립트 엔진이 식별자를 검색할대 사용하는 규칙이라고 생각 할 수 있습니다 .
위 코드에서 코드의 가장 바깥 영역에 선언된 x 변수는 어디서든 참조할수 있습니다 .
하지만 foo 함수 내부에서 선언된 x 변수는 foo 함수 내부에서만 참조할 수 있고 foo 함수 외부에서는 참조할 수 없습니다 .
이때 두개의 x 변수는 식별자 이름이 동일하지만 스코프가 다른 별개의 변수입니다 .
만약 스코프라는 개념이 없다면 같은 이름을 갖는 변수를 충돌을 일으키므로 프로그래밍 전체에서 하나밖에 사용할 수 없습니다 .
스코프(유효범위를)통해서 식별자인 변수 이름의 충돌을 방지하여 같은 이름의 변수를 사용할 수 있게 합니다 .
코드의 문맥과 환경
코드가 어디서 실행되며 주변에 어떤 코드가 있는지를 렉시컬 환경 이라고 합니다.
코드의 문맥은 렉시컬 환경에서 이루어집니다 .
이를 구현한것이 실행 컨텍스트(execution context) 이며 , 모든 코드는 실행 컨텍스트에서 평가되고 실행됩니다 .
스코프는 실행 컨텍스트와 깊은 관련이 있습니다 .
스코프의 종류
코드는 전역(global)과 지역(local)으로 구분할 수 있습니다 .
전역 :
코드의 가장 바깥영역 ,
스코프 : 전역 스코프
변수 : 전역변수
지역 :
함수 몸체 내부,
스코프: 지역 스코프
변수 : 지역변수
전역 변수는 어디서든지 참조할수 있습니다 .
지역과 지역 스코프
지역이란 함수 몸체 내부를 말합니다 .
지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효하다.