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: ƒ} p..
스코프란? 식별자 접근 규칙에 따른 유효 범위를 말한다. 식별자(변수, 함수, 클래스)에 접근할 수 있는 범위가 존재한다. 범위는 중괄호 또는 함수에 의해 나눠지고, 그 범위를 스코프라고 부른다. 스코프의 종류 스코프는 블록 스코프와 함수 스코프가 있다. (화살표 함수는 함수 스코프가 아니다.) 블록 스코프 블록 레벨 스코프란 코드 블록({…})내에서 유효한 스코프를 의미한다. 여기서 “유효하다”라는 것은 “참조(접근)할 수 있다”라는 뜻이다. ES6에서는 let과 const가 도입되면서 이 둘은 블록 스코프를 가진다. 함수 스코프 함수 레벨 스코프란 함수 코드 블록 내에서 선언된 변수는 함수 코드 블록 내에서만 유효하고 함수 외부에서는 유효하지 않다(참조할 수 없다)는 것이다. var 키워드가 함수 스..
16장 프로퍼티 어트리뷰트 16-1 내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메더스다. ECMAScript 사양에 등장하는 이중 대괄호([[...]])로 감싼 이름들이 내부 슬롯과 내부 메서드다. 모든 객체는 [[Prototype]]이라는 내부 슬롯을 갖는다. 내부 슬롯은 자바스크립트 엔진의 내부 로직이므로 원칙적으로 직접 접근할 수 없지만 [[Prototype]] 내부 슬롯의 경우, proto를 통해 간접적으로 접근할 수 있다. const o = {}; // 내부 슬롯은 자바스크립트 엔진의 내부 로직이므로 직접 접근할 수 없다. o.[[Prototype]] // 에러 // 단, 일부 ..
15장 let, const 키워드와 블록 레벨 스코프 15-1 var 키워드로 선언한 변수의 문제점 변수 중복 선언 허용 var 키워드로 선언한 변수는 중복 선언이 가능하다. var x = 1; var y = 1; // var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언을 허용한다. // 초기화문이 있는 변수 선언문은 자바스크립트 엔진에 의해 var 키워드가 없는 것처럼 동작한다. var x = 100; // 초기화문이 없는 변수 선언문은 무시된다. var y; console.log(x); // 100 console.log(y); // 1 함수 레벨 스코프 var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다. 따라서 함수 외부에서 var 키워드로 선언한 변수는 코드..
14장 전역 변수의 문제점 14-1 변수의 생명주기 지역변수의 생명 주기 변수는 선언에 의해 생성되고 할당을 통해 값을 갖는다. 변수는 자신이 선언된 위치에서 생성되고 소멸한다. function foo() { var x = 'local'; console.log(x); // local return x; } foo(); console.log(x) // ReferenceError 지역 변수 x는 foo 함수가 호출되기 이전까지는 생성되지 않는다. foo 함수를 호출하지 않으면 함수 내부의 변수 선언문이 실행되지 않기 때문이다. 변수 선언은 선언문이 어디에 있든 상관없이 가장 먼저 실행된다. 하지만 이것은 전역 변수에 한정된 것이다. foo 함수 호출 x 변수의 선언문 실행 -> undefined로 초기화 함수..
12장 함수 12-1 함수란? 함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 함수 내부로 입력을 전달받는 변수를 매개 변수, 입력을 인수, 출력을 반환값이라 한다. 함수는 함수 정의를 통해 생성한다. 함수는 인수를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시해야 실행된다. 이를 함수 호출이라 한다. //함수 정의 function add(x, y) { return x + y; } //함수 호출 var result = add(2, 5); // 함수 add에 인수 2, 5를 전달하면서 호출하면 반환값 7을 반환한다. console.log(result); // 7 12-2 함수를 사용하는 이유 함수는 몇 번이든 호출할 수 있으므로 코드의 재사용..
13장 스코프 13-1 스코프란? 변수는 자신이 선언된 위치에 의해 자신이 유효한 범위, 즉 다른 코드가 변수 자신을 참조할 수 있는 범위가 결정된다. 변수뿐만 아니라 모든 식별자가 그렇다. 다시 말해, 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 이를 스코프라 한다. var x = "global"; function foo() { var x = "local"; console.log(x); // 1 } foo(); console.log(x); // 2 자바스크립트 엔진은 이름이 같은 두 개의 변수 중에서 어떤 변수를 참조해야 할 것인지를 결정해야 한다. 이를 식별자 결정이라 한다. 자바스크립트 엔진은 ..
11장 원시 값과 객체의 비교 -원시타입과 객체 타입의 차이점- 원시 값 객체 값 변경 불가능항 값 변수에 할당하면 변수에는 실제 값이 저장 변수에 할당하면 변수에는 참조 값이 저장 변수를 다른 변수에 할당하면 원시 값이 복사되어 전달 변수를 다른 변수에 할당하면 참조 값이 복사 11-1 원시 값 원시 타입의 값, 즉 원시 값은 변경 불가능한 값이다. 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이고, 값은 변수에 저장된 데이터로서 표현식이 평가되어 생성된 결과를 말한다. // const 키워드를 사용해 선언한 변수는 재할당이 금지된다. 상수는 재할당이 금지된 변수 일 뿐이다. const o = {}; // const 키워드를 사용해 선언한 변..
10장 객체 리터럴 10-1 객체란? 자바스크립트는 객체 기반의 프로그래밍 언어 원시 값은 변경 불가능한 값 이지만 객체는 변경 가능한 값이다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며 프로퍼티는 키와 값으로 구성 된다.자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값이 될 수 있다. 자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있다. 따라서 함수도 프로퍼티 값으로 사용할 수 있다. 프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 메서드라 부른다. 이처럼 객체는 프로퍼티와 메서드로 구성된 집합체이다. 프로퍼티 : 객체의 상태를 나타내는 값 메서드 : 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작 var person = { // 프로퍼티 name : 'Lee', age..
2주차 07.연산자 연산자 연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만든다. 이 때 연산의 대상을 피연산자라 한다. //산술연산자 5 * 4 // -> 20 //문자열 연결 연산자 'My name is ' + 'Lee' // -> 'My name is Lee' //할당 연산자 color = 'red' // -> 'red' //비교 연산자 3 > 5 // -> false //논리 연산자 true && false // -> false //타입 연산자 typeof 'Hi' // => string 7-1. 산술연산자 산술연산자 산술연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다. 산술 연산이 불가능한 경우, NaN을..