목록개발 도서/자바스크립트 deepdive (48)
진취적 삶
22.1 this 키워드 객체 = 상태(프로퍼티) + 동작 (메서드 ) 메서드가 자신이 속한 객체의 프로퍼티를 참조하려면 자신이 속한 객체를 가리키는 식별자를 참조해야한다. this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조변수 이다 . this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할수 있다. js this 는 함수가 호출되는 방식에 따라 this에 바인딩될 값, 즉 this 바인딩이 동적으로 결정된다. console.log(this); //window function square(number) { console.log(this); //window return number * number; } square(2); const person..
23.1 소스코드의 타입 | 소스 코드의 타입 설명 전역코드 전역에 존재하는 소스코드를 말한다. 전역에 정의된 함수 , 클래스 등의 내부 코드는 포함되지 않는다 . 함수코드 함수 내부에 존재하는 소스코드 함수 내부에 중첩된 함수,클래스 등의 내부코드는 포함되지 않는다. eval 코드 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드를 말한다. 모듈 코드 모듈 내부에 존재하는 소스코드를 말한다. 전역 코드 : 전역 변수를 관리하기 위해 최상위 스코프인 전역 스코프를 생성해야 한다. 함수 코드 : 지역 스코프를 생성하고 지역 변수, 매개변수, argument 객체를 관리해야 한다. 생성한 지역 스코프를 전역 스코프에서 시작하는 스코프 체인의 일원으로 연결해야 한다. eval 코드 : st..
함수를 일급 객체로 취급하는 함수형 프로그래밍 언어에서 사용되는 중요한 특성 클로저 : 함수와 그 함수가 선언된 렉시컬 환경이다 24.1 렉시컬 스코프 js 엔진은 함수를 어디서 호출했는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결정한다. 이를 렉시컬 스코프라 한다. 렉시컬 환경의 ‘외부 렉시컬 환경에 대한 참조’ 저장할 참조값, 상위 스코프에 대한 참조는 함수 정의가 평가되는 시점에 함수가 정의된 환경에 의해 결정된다. 24.2 함수 객체의 내부 슬롯 함수는 자신의 내부슬롯에 자신이 정의된 환경 , 즉 상위 스코프의 참조를 저장한다. 함수 객체의 내부슬롯에 저장된 현재 실행 중인 실행 컨텍스트의 렉시컬 환경의 참조가 바로 상위 스코프이다. 또한 자신이 호출되었을때 생성될 함수 렉시컬 환..
25.1 클래스는 프로토 타입의 문법적 설탕인가? 클래스를 new 연산자 없이 호출하면 에러가 발생 생성자 함수를 new 연산자 없이 호출하면 일반함수 호출 클래스는 상속 지원 extends 와 super 지원 생성자 함수는 extends 와 super 지원안함 클래스는 호이스팅이 발생하지 않는것처럼 제공 함수 선언문으로 정의된 생성자 함수는 함수 호이스팅이 ,함수 표현식으로 정의한 생성자 함수는 변수 호이스팅 발생 클래스 내의 모든 코드에는 암묵적으로 strict mode 실행 생성자 함수는 stride mode 지정하지 않음 클래스의 constructor ,프로토타입 ,정적 메서드는 모두 Enumerable 열거 되지 않는다. 25.2 클래스 정의 const Person =class{} 클래스를 표현..
16.1 내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 js 엔진의 내부 로직이므로 원칙적으로 js는 내부 슬롯과 내부 메서드에 직접 접근하거나 호출할수 있는 방법을 제공하지 않는다 . const obj = {}; obj.__proto__; __ proto __ 을 통해 간접적으로 접근할수 있다. 16.2 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체 js 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 property attribute를 기본값으로 자동 정의한다. 프로퍼티의 상태란 프로퍼티의 값(value) ,값의 갱신 가능 여부(writable) ,열거 가능 여부(enumerable) ,재정의 가능 여부 (configurable) const person = { name: "suha", }..
17.1 Object 생성자 함수 new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환 생성자 함수란 new 연산자와 함께 호출하여 객체를 생성하는 함수. 생성자 함수에 의해 생성된 객체를 인스턴스 라고 한다. 반드시 Object 생성자 함수를 사용해 빈 객체를 생성해야 하는것은 아니다. 특별한 이유가 없으면 그다지 유용해 보이지 않음 const strObj = new String("suha"); console.log(typeof strObj); console.log(strObj); const numObj = new Number(123); console.log(typeof numObj); console.log(numObj); const boolObj = new Boolean(..
18.1 일급 객체 무명의 리터럴로 생성할수 있다. 즉 런타임에 생성이 가능 변수나 자료구조에 저장할수 있다. 함수의 매개변수에 저장할수 있다. 함수의 반환값으로 사용할수 있다. 함수가 일급객체 라는것은 함수를 객체와 동일하게 사용할수 있다는 의미 . 함수와 일반 객체의 차이는 함수는 호출 가능 일반 객체는 불가능 18.2 함수 객체의 프로퍼티 함수도 프로퍼티를 가질수 있다. function square(number) { return number * number; } console.log(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__")); /* { get: [Function: get __proto__], set: [Function: set ..
js는 클래스 기반 프로그램보다 더 효율적이며 강력한 프로토타입 기반의 객체지향 프로그래밍 언어 문법적 설탕 (syntatic sugar) : 사람이 이해하고 표현하기 쉽게 디자인된 프로그래밍 언어 문법 19.1 객체 지향 프로그래밍 객체의 집합으로 프로그램을 표현하려는 프로그래밍 패러다임 다양한 속성 중에서 프로그램에 필요한 속성만 간추려 내어 표현하는것을 추상화 라고 한다. 속성을 통해 여러개의 값을 하나의 단위로 구성한 복합적인 자료구조를 객체라고 함 객체는 상태 데이터와 동작을 하나의 논리적인 단위로 묶은 복합적인 자료구조 객체의 상태 = 프로퍼티 객체의 동작 = 메서드 19.2 상속과 프로토타입 상속은 어떤 객체의 프로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할수 있는것 상속을 통해 ..