JavaScript

[모던 자바스크립트 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

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

9.1 타입 변환이란?자바스크립트의 모든 값은 타입이 있고, 개발자의 의도에 따라 다른 타입으로 변환 가능명시적 타입 변환(=타입 캐스팅): 개발자가 의도적으로 값의 타입을 변환하는 것암묵적 타입 변환(=타입 강제 변환)원시 값은 변경 불가능한 값 → 타입 변환은 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것단 한번 사용하고 버림 → 기존 변수 값을 재할당하여 변경하는 것이 아님9.2 암묵적 타입 변환개발자 의도와 상관없이 표현식을 평가하는 도중에 js 엔진에 의해 암묵적으로 타입이 자동 변환되는 것문자열 타입으로 변환1 + "2" // -> "12"+연산자는 피연산자 중 하나 이상이 문자열일 때 문자열 연결 연산자로 동작문자열 연결 연산자: 문자열 값을 만듦, 모든 피연산자는 모두 ..

JavaScript 2023.01.07

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

8장 도입제어문: 조건에 따라 코드 블록을 실행(조건문)하거나 반복 실행(반복문)할 때 사용일반적으로 코드는 위에서 아래 방향으로 순차적으로 실행제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있음⇒ 코드 흐름을 이해하기 힘들고 가독성을 해치는 단점⇒ 추후에 살펴볼 고차 함수를 통해 제어문 사용을 억제하여 복잡성 해결8.1 블록문블록문: 0개 이상의 문을 중괄호로 묶은 것코드 블록, 블록이라고 부르기도 함js는 블록문을 하나의 실행 단위로 취급단독으로 사용할 수도 있으나 일반적으로 제어문이나 함수를 정의할때 사용언제나 문의 종료를 의미하는 자체 종결성을 갖기 떄문에 블록문의 끝에는 세미콜론을 붙이지 않음// 블록문{ var foo = 10;}// 제어문var x = 1;if (x 8.2 조건..

JavaScript 2022.12.19

[모던 자바스크립트 Deep Dive] 07장 - 연산자

7장 도입연산자: 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행해 하나의 값을 만듦피연산자: 연산의 대상, 값으로 평가될 수 있는 표현식어야 함7.1 산술 연산자산술 연산자: 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만듦산술 연산이 불가능한 경우, NaN을 반환이항 산술 연산자2개의 피연산자를 산술 연산하여 숫자 값을 만듦피연산자의 값을 변경하는 부수 효과 없고 언제나 새로운 값을 만들 뿐임단항 산술 연산자1개의 피연산자를 산술 연산하여 숫자 값을 만듦증가/감소 연산자는 피연산자의 값을 변경하는 부수 효과가 있음피연산자의 값을 변경하는 암묵적 할당이 이뤄짐전위 증가/감소 연산자: 먼저 피연산자의 값을 증가/감소시킨 후, 다른 연산을 수행후위 증가..

JavaScript 2022.12.19