실행 컨텍스트: 자바스크립트의 동작 원리를 담고 있는 핵심 개념스코프를 기반으로 식별자와 바인딩된 값을 관리하는 방식호이스팅이 발생하는 이유클로저의 동작 방식태스크 큐와 함께 동작하는 이벤트 핸들러비동기 처리의 동작 방식 23.1 소스코드의 타입소스코드는 실행 컨텍스트를 생성함타입에 따라 실행 컨텍스트를 생성하는 과정(코드가 평가되는 시점)과 관리 내용이 다름 1. 전역 코드전역에 존재하는 소스코드, 전역에 정의된 함수, 클래스 등의 내부 코드는 포함하지 않음최상위 스코프인 전역 스코프를 생성var 키워드로 선언된 전역 변수(프로퍼티)와 함수 선언문으로 정의된 전역 함수(메서드)를 참조하기 위해 전역 객체와 연결돼야 함전역 코드가 평가되면 전역 실행 컨텍스트가 생성됨 2. 함수 코드함수 내부 소스코드, ..
22.1 this 키워드객체 리터럴 방식으로 생성한 객체: 메서드 내부에서 메서드 자신이 속한 객체를 가리키는 식별자를 재귀적으로 참조const circle = { radius: 5, getDiameter() { return 2 * circle.radius; }};getDiameter의 circle 참조 표현식이 평가되는 시점: getDiameter 메서드가 호출되어 함수 몸체가 실행되는 시점 미래에 생성될 인스턴스의 식별자를 알 수 없기 때문에 재귀적으로 참조 방식은 일반적이지 않고 바람직하지 않음=> 자신이 속한 객체 / 자신이 생성할 인스턴스를 가리키는 특수한 식별자 this(자기 참조 변수) 사용자바스크립트 엔진에 의해 암묵적으로 생성되며 코드 어디서든 참조할 수 있음함수 호출 시 ar..
21.1 자바스크립트 객체의 분류표준 빌트인 객체(standard built-in objects/native objects/global objects)ECMAScript 사양에 정의된 객체애플리케이션 전역에 공통 기능을 제공자바스크립트 실행 환경(브라우저/Node.js)에 관계없이 언제나 사용할 수 있음전역 객체의 프로퍼티로 제공되어 언제나 참조할 수 있음호스트 객체(host objects)ECMAScript 사양에 정의되어 있지 않음자바스크립트 실행 환경에서 추가로 제공하는 객체브라우저 환경: DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker 등 클라이언트 사이..
20.1 strict mode(엄격 모드)ES5부터 도입 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킴- 잠재적 오류(암묵적 전역 등) 20.2 strict mode의 적용전역의 선두 또는 함수 몸체에 'use strict' 작성ES6 클래스와 모듈은 기본적으로 적용됨 20.3 전역에 strict mode를 적용시키는 것은 오류를 발생시킬 수 있음엄격 모드는 스크립트 단위로 실행됨strict mode 스크립트와 non-strict mode 스크립트(자체 코드 혹은 서드파티 라이브러리)를 혼용하는 것은 오류를 발생시킬 수 있음(function () { 'use strict'; ..
19.8 오버라이딩과 프로퍼티 섀도잉프로토타입 프로퍼티: 프로토타입이 소유한 프로퍼티(+메서드)인스턴스 프로퍼티: 인스턴스가 소유한 프로퍼티(+메서드) 프로토타입 프로퍼티와 같은 이름의 프로퍼티를 인스턴스에 추가하면(오버라이딩) 인스턴스 프로퍼티로 추가됨프로퍼티 섀도잉: 상속 관계에 의해 프로퍼티가 가려지는 현상오버라이딩(overriding)상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용하는 방식오버로딩(overloading)동일한 이름의 함수를 매개변수의 타입 또는 개수로 메서드를 구별하여 호출하는 방식자바스크립트는 지원하지 않지만 arguments 객체를 사용해 구현할 수 있음 하위 객체를 통해 프로토타입의 프로퍼티를 변경/삭제하는 것(set)은 불가능 19.9 프로토타입의 교체1...
자바스크립트는 명령형, 함수형, 프로토타입 기반, 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어 클래스와 생성자 함수는 프로토타입 기반의 인스턴스를 생성하지만 정확히 동일한 동작은 아님클래스가 더 엄격하며 추가 기능 제공(25장 클래스에서 계속) 19.1 객체지향 프로그래밍원시 타입 값을 제외한 자바스크립트의 모든 값은 객체(함수, 배열, 정규 표현식 등) 프로그램을 독립적인 객체의 집합으로 표현하려는 패러다임객체의 상태 데이터: 프로퍼티, 동작: 메서드 19.2 상속과 프로토타입// 1function Circle(radius) { this.radius = radius; this.getArea = function () { return Math.PI * this.radius ** 2..
1. 일급 객체- 무명의 리터럴로 생성 가능(런타임에 생성 가능)- 변수나 자료구조(객체, 배열 등)에 저장 가능- 함수의 매개변수에 전달 가능- 함수의 반환값으로 사용 가능 자바스크립트 함수는 위 조건에 모두 해당하기 때문에 일급 객체임= 함수를 객체와 동일하게 사용할 수 있음=> 함수형 프로그래밍 가능 함수는 일반 객체와 달리 호출 가능, 함수 고유의 프로퍼티 소유 2. 함수 객체의 프로퍼티arguments, caller, length, name, prototype __proto__는 접근자 프로퍼티이며,Object.prototype 객체의 프로퍼티를 상속받은 것으로 함수 객체 고유의 프로퍼티가 아님 1. arguments 프로퍼티값: arguments 객체함수 호출 시 전달된 인수들의 정보를 담고 ..
17.1 Object 생성자 함수빈 객체 생성 후 프로퍼티/메서드를 추가const person = new Object();person.name = 'Lee';person.sayHello = function () { console.log('Hi My name is ' + this.name);} 생성자 함수new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수 Object, String, Number, Boolean, Function, Array, Date, RegExp, PromiseFunction 생성자 함수로 만든 값의 타입은 function, 그 외 생성자 함수로 만든 값의 타입은 object 17.2 생성자 함수1. 객체 리터럴에 의한 객체 생성 방식의 문제점동일한 프로퍼티를 갖는 객체..
16.1 내부 슬롯과 내부 메서드자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드- 이중 대괄호 [[...]]- 공개된 객체의 프로퍼티는 아님: 엔진의 내부 로직이므로 직접 접근하거나 호출할 수 있는 방법을 제공하지 않음- 간접적으로 접근 가능: 모든 객체는 [[Prototype]]이라는 내부 슬롯을 갖는데 이는 __proto__로 접근할 수 있음 16.2 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의- 프로퍼티의 값[[Value]]- 값의 갱신 가능 여부[[Writable]]- 열거 가능 여부[[Enumerable]]- 재정의 가..
15.1 var 키워드로 선언한 변수의 문제점* 선언하지 않은 변수에 값을 할당하면 암묵적 전역이 되어 전역 객체의 프로퍼티가 됨 1. 변수 중복 선언 허용의도치 않게 값이 변결될 수 있음초기화문이 없는 변수 선언문은 무시됨var x = 1;var x;console.log(x) // 1 2. 함수 레벨 스코프함수의 코드 블록만을 지역 스코프로 인정if, for, while, try/catch 등 블록 레벨 스코프X 3. 변수 호이스팅런타임 이전에 자바스크립트 엔진에 의해 선언 단계와 초기화 단계가 한번에 진행됨변수 선언문 이전에 참조할 수 있음(undefined. ReferenceError 발생 X)선언 이전에 참조하는 것이 에러를 발생시키지 않지만 가독성이 떨어지고 오류 발생시킬 수 있음함수 선언문(f..

