STUDY/모던 자바스크립트 Deep Dive

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

    1. var 키워드로 선언한 변수의 문제점 1. 변수 중복 선언 허용 2. 함수 레벨 스코프 var 키워드로 선언한 변수는 함수의 코드 블록만을 지역 스코프로 인정한다. var x = 1; if (true) { var x = 10; // 지역 스코프로 인정되지 않은 코드 블록 내에서 변수를 재선언 하는 경우 의도치 않게 변수의 값이 변경될 수 있다. } console.log(x); // 10 함수 레벨의 스코프는 함수나 변수 선언문에서 선언한 변수도 전역 변수가 된다. 3. 변수 호이스팅 var키워드로 선언한 변수는 런타임 이전에 자바스크립트 엔진에 의해 암묵적으로 "선언 단계"와 "초기화 단계"가 한번에 진행된다. console.log(foo); // undefined var foo; console.l..

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

    1. 변수의 생명 주기 1. 지역변수의 생명 주기 변수는 소멸되는 생명 주기가 있다. 자신이 생성된 위치에서 생성되고 소멸한다.(Garbage Collection에 의해) 전역변수의 생명 주기는 애플리케이션의 생명 주기와 같다. 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다. 전역변수 선언은 코드가 한 줄씩 순차적으로 런타임으로 실행되는 것이 아니라 런타임 이전 단계에서 자바스크립트 엔진에 의해 먼저 실행된다. 지역변수는 함수가 호출된 직후에 함수의 코드가 한줄 씩 순차적으로 실행되기 전에 자바스크립트 엔진에 의해 먼저 실행된다. var x = 'global'; function foo() { var x = 'local'; console.log(x); return x; } foo(); co..

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

    1. 스코프 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)가 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위 즉, 식별자가 유효한 범위 var x = 'global'; function foo () { var x = 'function scope'; console.log(x); } foo(); // ? console.log(x); // ? 이때, 위의 출력값은 function scope 아래의 출력값은 global 으로 나타난다. ❓이유 자바스크립트 엔진은 식별자 결정(어떤 변수를 참조해야 할 것인지 결정)해야하는데, 스코프를 통해 어떤 변수를 참조해야 하는지 결정한다. 코드를 시랭 할 때 코드의 문맥을 고려하게되는데, 코드가 어디서 실행되며 어떤 코드가 있는 지에 ..

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

    1. 객체란? 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등) 원시 값은 변경 불가능한 값이지만 객체 타입의 값은 변경 가능한 값이다. 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키와 값으로 구성된다. 2. 객체 리터럴에 의한 객체 생성 자바스크립트는 프로토타입 기반 객체 지향 언어로서 클래스 기반 객체지향 언어와는 달리 다양한 객체 생성 방법을 지원한다. - 객체 리터럴 - Object 생성자 함수 - Object.create 메서드 - 클래스(ES6) 객체 리터럴은 자바스크립트의 유연함과 강력함을 대표하는 객체 생성 방식이다. 숫자 값이나 문자열을 만드는 것과 유사하게 리터럴로 객체를 생성한다. 3. 프로퍼티 객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성된다. ..

    [모던 자바스크립트 Deep Dive] 09장 타입 변환과 단축 평가

    1. 타입 변환이란? 자바스크립트의 모든 값은 타입이 있다. 개발자가 의도적으로 타입을 변환하는 것을 명시적 타입 변환 또는 타입 캐스팅이라고 한다. var x = 10; // 명시적 타입 변환 var str = x.toString(); // 숫자를 문자열로 타입 캐스팅한다. console.log(typeof str); // string // 변수 x의 값이 변경된 것은 아니다. console.log(typeof x, x); // number 10 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 것을 암묵적 타입 변환 또는 타입 강제 변환이라고 한다. var x = 10; // 암묵적 타입 변환 // 숫자 타입 x의 값을 바탕으로 새로운 문자열 타입의 값을 생성해 표현..

    [모던 자바스크립트 Deep Dive] 08장 제어문

    1. 블록문 0개 이상의 문을 중괄호로 묶은 것 2. 조건문 조건문은 조건식의 결과에 따라 코드 블록의 실행을 결정한다. 2.1. if ...else 문 if (조건식1){ // 조건식1이 true 일때 실행 } else if (조건식2){ // 조건식2가 true일때 실행 } else { // 전부 false이면 실행 } 2.2. switch 문 switch (표현식) { case 표현식1: /* code */ break; default: break; } 3. 반복문 반복문은 조건식의 평가 결과가 참인 경우 코드 블록을 실행한다. 3.1. for 문 for(int i=0; i < 2; i++){ console.log(i); } 3.2. while 문 while (count < 3) { console.l..