실행 컨텍스트는 자바스크립트의 동작 원리를 담고 있는 핵심 개념이다. 1 소스코드의 타입ECMAScript 사양은 소스코드를 4가지 타입으로 구분한다.소스 코드의 타입설명전역 코드전역에 존재하는 소스 코드이며 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않는다.함수 코드함수 내부에 존재하는 소스 코드를 말하며 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함되지 않는다.eval 코드빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드를 말한다.모듈 코드모듈 내부에 존재하는 소스코드를 말하며 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않는다. 소스 코드를 4가지 타입으로 구분하는 이유는 소스코드의 타입에 따라 실행 컨택스트를 생성하는 과정과 관리 내용이 다르기 ..
this 바인딩
22.1 this 키워드 객체는 상태를 나타내는 프로퍼티와 동작을 나타내는 메서드를 하나의 논리적인 단위로 묶은 복합적 자료구조이다. 메서드는 자신이 속한 객체의 프로퍼티를 참조/변경할 수 있어야 한다. 이때 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다. 객체 리터럴 방식으로 정의된 객체는 재귀적으로 자신이 속한 객체를 가리킬 수 있다. const circle = { radius: 5, getDiameter() { // 해당 메서드가 속한 객체의 프로퍼티나 다른 메서드를 참조하려면 // 자신이 속한 객체인 circle을 참조할 수 있어야 한다. return 2 * circle.radius; } } 위의 예제의 객체 리터럴은 circle 변수에 할당되기 직전에 평가되어 getDiameter..
this 바인딩 EC(Execution Context) 가 생성될 때마다 this 바인딩이 발생하며, 우선순위 순으로 나열하면 아래와 같다. this 바인딩 되는 순서 1. new를 사용했을 때 해당 객체로 바인딩된다. var name = "global"; function Func() { this.name = "Func"; this.print = function f() { console.log(this.name); }; } var a = new Func(); a.print(); // Func 2. call, apply, bind 와 같이 명시적 바인딩을 사용한 경우 인자로 전달된 객체에 바인딩 된다. function func() { console.log(this.name); } var obj = { na..
정의 코드의 실행환경에 대한 여러가지 정보를 가진 개념 으로, 간단하게 자바스크립트 엔지에 의해 만들어지고 사용되는 코드 정보를 담은 객체 집합이다. 종류 JS 코드는 3가지 종류가 있다. 글로벌 스코프에서 실행되는 글로벌 코드, 함수 스코프에서 실행되는 함수코드, 그리고 이 글에서 다루지 않는 eval()로 실행되는 코드가 있다.(eval()와 관련된 렉시컬 스코프에 대해서는 다음 글에서 정리 하겠다.) 각각의 코드는 자신만의 실행 컨텍스트를 생성한다. 엔진이 스크립트 파일을 실행하기 전, 글로벌 실행 컨텍스트(Global Execution Context, GEC)가 생성되고, 함수를 호출할 때마다 함수 실행 컨텍스트(Function Execution Context, FEC)가 생성된다. 주의할 점은 ..