본문 바로가기

Study/Javascript

(44)
모던 자바스크립트 Deep Dive 21장 빌트인 객체 21.1 자바스크립트 객체의 분류자바스크립트 객체는 다음과 같이 크게 3개의 객체로 분류할 수 있다.표준 빌트인 객체(standard built-in objects/native objects/global objects)표준 빌트인 객체는 ECMAScript 사양에 정의된 객체를 말하며, 애플리케이션 전역의 공통 기능을 제공한다. 표준 빌트인 객체는 ECMAScript 사양에 정의된 객체 이므로 자바스크립트 실행 환경(브라우저 또는 Node.js 환경)과 관계없이 언제나 사용할 수 있다. 표준 빌트인 객체는 전역 객체의 프로퍼티로서 제공된다. 따라서 별도의 선언 없이 전역 변수처럼 언제나 참조할 수 있다.호스트 객체(host objects)호스트 객체는 ECMAScript 사양에 정의되어 있지 않지만 자바..
모던 자바스크립트 Deep Dive 20장 strict mode 20.1 strict mode란?function foo() { x = 10;}foo();console.log(x); // ? 자바스크립트 엔진은 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성한다. 이때 전역 객체의 x 프로퍼티는 마치 전역 변수처럼 사용할 수 있다. 이러한 현상을 암묵적 전역(implicit global)이라 한다. 개발자의 의도와는 상관없이 발생한 암묵적 전역은 오류를 발생시키는 원인이 될 가능성이 크다. 따라서 반드시 var, let, const 키워드를 사용하여 변수를 선언한 다음 사용해야 한다. 잠재적인 오류를 발생시키기 어려운 개발 환경을 만들고 그 환경에서 개발하는 것이 좀 더 근본적인 해결이라고 할 수 있는데 이를 지원하기 위해 ES5부터 strict mode(엄격 모드)..
모던 자바스크립트 Deep Dive 18장 함수와 일급 객체 18.1 일급 객체다음과 같은 조건을 만족하는 객체를 일급 객체라 한다.무명의 리터럴로 생성할 수 있다. 즉, 런타임에 생성이 가능하다.변수나 자료구조(객체, 배열 등)에 저장할 수 있다.함수의 매개변수에 전달할 수 있다.함수의 반환값으로 사용할 수 있다.자바스크립트의 함수는 다음 예제와 같이 위의 조건을 모두 만족하므로 일급 객체다.// 1. 함수는 무명의 리터럴로 생성할 수 있다.// 2. 함수는 변수에 저장할 수 있다.// 런타임(할당 단계)에 함수 리터럴이 평가되어 함수 객체가 생성되고 변수에 할당된다.const increase = function (num) { return ++num;};const decrease = function (num) { return --num;};// 2. 함수는 ..
모던 자바스크립트 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 생성자 함수란 new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수를 말한다. ..
모던 자바스크립트 Deep Dive 16장 프로퍼티 어트리뷰트 16.1 내부 슬롯과 내부 메서드내부 슬록과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사용에서 사용하는 의사 프로퍼티(pseudo property)와 의사 메서드(pseudo method)다. ECMAScript 사양에 등장하는 이중 대괄호([[ ... ]])로 감싼 이름들이 내부 슬롯과 내부 메서드다. 자바스크립트 엔진에서 실제로 동작하지만 개발자가 직접 접근할 수 있도록 외부로 공개된 객체의 프로퍼티는 아니다. 즉, 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 내부 로직이므로 원칙적으로 자바스크립트는 내부 슬롯과 내부 메서드에 직접적으로 접근하거나 호출할 수 있는 방법을 제공하지 않는다. 단, 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있..
모던 자바스크립트 Deep Dive 15장 let, const 키워드와 블록 레벨 스코프 15.1 var 키워드로 선언한 변수의 문제점 15.1.1 변수 중복 선언 허용 var 키워드로 선언한 변수는 중복 선언이 가능하다. 만약 동일한 이름의 변수가 이미 선언되어 있는 것을 모르고 변수를 중복 선언하면서 값까지 할당했다면 의도치 않게 먼저 선언된 변수 값이 변경되는 부작용이 발생한다.  15.1.2 함수 레벨 스코프 var 키워드로 선언한 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다. 따라서 함수 외부에서 var 키워드로 선언한 변수는 코드 블록 내에서 선언해도 모두 전역 변수가 된다.var x = 1;if (true) { // x는 전역 변수다. 이미 선언된 전역 변수 x가 있으므로 x 변수는 중복 선언된다. // 이는 의도치 않게 변수값이 변경되는 부작용을 발생시킨다. ..
모던 자바스크립트 Deep Dive 14장 전역 변수의 문제점 전역 변순의 무분별한 사용은 위험하다. 전역 변수를 반드시 사용해야할 이유를 찾지 못한다면 지역변수를 사용해야 한다.  14.1 변수의 생명 주기 14.1.1 지역 변수의 생명 주기변수는 선언에의해 생성되고 할당을 통해 값을 갖는다. 변수에 생명 주기가 없다면 한 번 선언된 변수는 프로그램을 종료하지 안흔 한 영원히 메모리 공간을 점유하게 된다. 변수는 자신이 선언된 위치에서 생성되고 소멸한다. 함수 내부에서 선선된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다. 하지만 함수 내부에서 선언되 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다.     14.1.2 전역 변수의 생명 주기 함수와 달리 전역 코드는 명시적인 호출 없이 실행된다. 다시 말해, 전역 코든ㄴ 함수 호출과..
모던 자바스크립트 Deep Dive 13장 스코프 13.1 스코프란?모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자심이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 이를 스코프라 한다. 즉, 스코프는 식별자가 유효한 범위를 말한다.var x = 'global';function foo() { var x = 'local'; console.log(x); // ①}foo();console.log(x); // ② 코드이 가장 바깥 영역과 foo 함수 내부에 같은 이름을 갖는 x 변수를 선언했고 ①과 ②에서 x 변수를 참조한다. 이때 자바스크립트 엔진은 이름이 같은 두 개의 변수 중에서 어떤 변수를 참조해야 할 것인지를 결정해야한다. 이를 식별자 결정이라한다. 자바스크립트 엔진은 스코프를 통해 어떤 변수를 ..