분류 전체보기

[모던 자바스크립트 Deep Dive] 17장 - 생성자 함수에 의한 객체 생성

도입객체 리터럴 이외에 다양한 객체 생성 방식 중에서 생성자 함수를 사용하여 객체를 생성하는 방식 17.1 Object 생성자 함수new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환빈 객체를 생성한 이후 프로퍼티 또는 메서드를 추가하여 객체를 완성할 수 있음// 빈 객체의 생성const person = new Object();// 프로퍼티 추가person.name = 'Lee';person.sayHello = function () { console.log('Hi! My name is ' + this.name);};console.log(person); // {name: "Lee", sayHello: ƒ}person.sayHello(); // Hi! My name is Lee..

JavaScript 2023.01.09

[모던 자바스크립트 Deep Dive] 16장 - 프로퍼티 어트리뷰트

16.1 내부 슬롯과 내부 메서드내부 슬롯과 내부 메서드는 js 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드ECMAScript 사양에 등장하는 이중 대괄호([[…]])로 감싼 이름들js 엔진의 내부 로직이므로 내부 슬롯과 내부 메서드에 직접적으로 접근하거나 호출할 수 있는 방법을 제공하지 않음.단, 일부는 제공하긴 함모든 객체는 [[Prototype]]이라는 내부 슬롯을 가짐. 이는 proto를 통해 간접적으로 접근할 수 있음const o = {};// 내부 슬롯은 자바스크립트 엔진의 내부 로직이므로 직접 접근할 수 없다.o.[[Prototype]] // -> Uncaught SyntaxError: Unexpected token '['// 단, ..

JavaScript 2023.01.07

[모던 자바스크립트 Deep Dive] 15장 - let, const 키워드와 블록 레벨 스코프

15.1 var 키워드로 선언한 변수의 문제점변수 중복 선언 허용초기화 문이 있는 변수 선언문은 js 엔진에 의해 var 키워드가 없는 것 처럼 동작 var x = 1;초기화 문이 없는 변수 선언문은 무시 var x;함수 레벨 스코프var 키워드로 선언한 변수는 함수의 코드 블록만을 지역 스코프로 인정변수 호이스팅var 키워드로 변수를 선언하면 변수 호이스팅에 의해 변수 선언문 이전에 참조 가능단, 할당문 이전에 변수를 참조하면 undefined 반환// 이 시점에는 변수 호이스팅에 의해 이미 foo 변수가 선언되었다(1. 선언 단계)// 변수 foo는 undefined로 초기화된다. (2. 초기화 단계)console.log(foo); // undefined// 변수에 값을 할당(3. 할당 단계)foo ..

JavaScript 2023.01.07

[모던 자바스크립트 Deep Dive] 14장 - 전역 변수의 문제점

14.1 변수의 생명 주기지역 변수의 생명 주기함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다변수 선언은 런타임 이전 단계에 먼저 실행되는데, 전역 변수에 한정된 것이다함수 내부에서 선언한 변수는 함수가 호출된 직후에 함수 몸체의 코드가 한 줄씩 순차적으로 실행되기 이전에 먼저 실행됨지역변수의 생명 주기는 함수의 생명 주기와 일치변수의 생명 주기는 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리 풀에 반환되는 시점까지함수 내부에 선언된 지역 변수는 함수가 생성한 스코프에 등록됨 함수가 생성한 스코프는 렉시컬 환경이라 부르는 물리적 실체가 있음 → 변수는 자신이 등록된 스코프가 소멸(메모리 해제)될 때까지 유효할당된 메모리 공간은 더 이상 누구도 참조하..

JavaScript 2023.01.07

[모던 자바스크립트 Deep Dive] 13장 - 스코프

13.1 스코프란?스코프: 식별자가 유효한 범위모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정됨식별자 결정: 스코프를 통해 이름이 같은 두 개의 변수 중에서 어떤 변수를 참조해야 할 것인지 결정스코프는 식별자를 검색할 때 사용하는 규칙이라고 할 수 있음렉시컬 환경: 코드가 어디서 실행되며 주변에 어떤 코드가 있는지하나의 값은 유일한 식별자에 연결돼야 하므로 식별자인 변수 이름은 중복될 수 없음프로그래밍 언어에서는 스코프를 통해 식별자 충돌을 방지하여 같은 이름의 변수를 사용할 수 있게 함스코프 내에서는 식별자가 유일해야 하지만 다른 스코프에서는 같은 이름의 식별자를 사용할 수 있음var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언이 허용되지만..

JavaScript 2023.01.07

[모던 자바스크립트 Deep Dive] 12장 - 함수

12.1 함수란?함수: 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것매개변수: 함수 내부로 입력을 전달받는 변수인수: 입력반환값: 출력함수는 값이며, 식별자인 함수 이름을 사용할 수 있음함수는 함수 정의를 통해 생성// 함수 정의function add(x, y) { return x + y;}함수 호출을 통해 함수가 실행됨코드 블록에 담긴 문들이 일괄적으로 실행되고 실행 결과인 반환값을 반환 12.2 함수를 사용하는 이유재사용 가능유지 보수의 편의성을 높임코드의 신뢰성을 높임적절한 함수 이름은 코드의 가독성을 향상시킴 12.3 함수 리터럴함수는 객체 타입의 값함수 리터럴로 생성function 키워드, 함수 이름, 매개변수 목록, 함수 몸체로 구성함수 리터럴의 구성 요소..

JavaScript 2023.01.07

[모던 자바스크립트 Deep Dive] 11장 - 원시 값과 객체의 비교

11.1 원시 값변경 불가능한 값원시 타입의 값, 즉 원시 값은 변경 불가능한 값한번 생성된 원시 값은 읽기 전용 값으로서 변경할 수 없음변경 불가능하다는 것은 변수가 아니라 값에 대한 진술변수: 메모리 공간 자체값: 변수에 저장된 데이터변수는 언제든지 재할당을 통해 변수 값을 변경(교체)할 수 있다상수: 재할당이 금지된 변수불변성: 변수 값을 변경하기 위해 원시 값을 재할당하면 새로운 메모리 공간을 확보하고 재할당한 값을 저장한 후, 변수가 참조하던 메모리 공간의 주소를 변경함불변성을 갖는 원시 값을 할당한 변수는 재할당 이외에 변수 값을 변경할 수 있는 방법이 없음문자열과 불변성문자열: 0개 이상의 문자로 이뤄진 집합1개 문자는 2byte의 메모리 공간에 저장됨문자열은 몇 개의 문자로 이뤄졌느냐에 따..

JavaScript 2023.01.07

[모던 자바스크립트 Deep Dive] 10장 - 객체 리터럴

10.1 객체란?js는 객체 기반의 프로그래밍 언어, 원시 값을 제외한 나머지 값은 모두 객체원시 타입은 단 하나의 값만 나타내고 원시 값은 변경 불가능한 값객체 타입은 다양한 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조이며 객체 값은 변경 가능한 값객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성js에서 사용할 수 있는 모든 값은 프로퍼티 값이 될 수 없음js의 함수는 일급 객체이므로 값으로 취급할 수 있음. → 함수도 프로퍼티 값으로 사용 가능프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라 부름객체는 프로퍼티와 메서드로 구성된 집합체프로퍼티: 객체의 상태를 나타내는 값메서드: 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작객체..

JavaScript 2023.01.07