실행 context
실행 컨텍스트: 실행할 코드에 제공할 환경 정보를 모아둔 객체
→만들 수 있는 방법: 함수를 실행하는 것이 가장 대표적
자바스크립트는 데이터를 콜 스택에 저장
실행 컨텍스트의 구성
lexical environment : 처음에는 variables과 같지만 변경사항이 실시간으로 반영됨
variables environment: 식별자의 정보, 선언위치, 외부환경 정보, lexical에 포함되고 변경되지 않음
this binding : this 식별자가 바라봐야 할 대상 객체
스코프
크게 2가지 타입이 존재: global(전역), local(지역)
전역 스코프 : 어느 곳에서든 해당 변수에 접근 가능
지역 스코프 : 해당 지역에만 접근할 수 있어 지역을 벗어나면 접근 불가능
자바스크립트에서 함수를 선언하면 선언할 때마다 새로운 스코프가 생성됨
함수 안에 선언된 변수는 함수 내부에서만 접근할 수 있다->함수 스코프
그 외에 중괄호로 둘러싸인 부분인 블록 스코프 등도 있음
스코프 체인
해당 스코프에서 찾아보고 없으면 상위 스코프에서 찾는 과정(global까지 올라감)
function aaa(){
const apple=3
return function bbb(){
const banana=10
// 스코프 체인 : bbb보다 상위에 있는 aaa함수에서 apple을 찾음
return apple
}
}
//aaa()가 곧 function bbb()
aaa()() // result: 3
bbb안에 apple이 없기 때문에 bbb보다 상위에 있는 aaa함수에서 apple을 찾음
매개변수가 들어가는 경우
function aaa(apple){
return function bbb(banana){
console.log(apple)
}
}
aaa(10)(3) //aaa 매개변수인 10이 출력됨