실행 컨텍스트
자바스크립트가 실행되는 환경
실행 컨텍스트의 종류
콜스택
const a = 'a';function foo() {const b = 'b';bar();function bar() {const c = 'c';if(true){console.log("Hello, World")}}foo();
→ 위 코드에서는 변수 a와 foo 함수가 담긴다.
→ 변수 b와 bar 함수
렉시컬 환경
const GlobalExecutionContext = {GlobalLexicalEnvironment: {GlobalEnvironmentRecord: {ObjectEnvironmentRecord: {BindingObject: global,},DeclarativeEnvironmentRecord: {a: "a"},GlobalThisValue:global,},OuterLexicalEnvironmentReference:null},};
const FooFunctionExecutionContext = {LexicalEnvironment: {FunctonEnvironmentRecord: {b: "b",ThisValue: global,},OuterEnvironmentReference: GlobalExecutionContext.GlobalLexicalEnvironment},};
클로저
function makeAddNumFunc(num) {const toAdd = numreturn function (num) {return num + toAdd}}const add5 = makeAddNumFunc(5)add5(3) // 8add5(8) // 13add5(15) // 20