JS 40

14. 전역 변수의 문제점

1. 변수의 생명 주기 1.1 지역 변수의 생명 주기 - 변수는 선언에 의해 생성되고 할당을 통해 값을 갖는다. 그리고 소멸된다. - 변수에 생명 주기가 없다면 변수는 영원히 메모리공간을 점유하게 된다. - 전역변수의 생명 주기는 애플리케이션의 생명 주기와 같다. 하지만 함수 내부에서 선언된 지역 변수는 함수가 종료하면 소멸된다. - 지역 변수는 함수가 호출된 직후에 런타임 전에 평가된다. - 지역변수의 생성 주기는 함수의 생명 주기와 일치한다. - 변수의 생명 주기는 메모리 공간이 확보된 시점부터 메모리 공간이 해제되어 가용 메모리 풀에 반환되는 시점까지이다. - 변수는 자신이 등록된 스코프가 소멸될때(메모리 해제) 까지 유효하다. - 할당된 메모리 공간은 참조하는 이가 없을떄 해제도어 가용메모리 풀에..

13. 스코프

1. 스코프(Scope)란? - 식별자가 유효한 범위이다. - 모든 식별자(변수이름, 함수이름, 클래스이름 등..)는 자신이 선언한 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효범위가 결정되는데. 이를 스코프라 한다. * 코드의 문맥과 환경 => 코드가 어디서 실행되며 어떤코드가 주변에 있는지를 랙시컬 환경이라고 부른다. => 코드의 문맥은 랙시컬 환경으로 이루어진다. => 이를 실행한 것이 실행 컨텍스트이며, 모든 코드는 실행 컨텍스트에서 평가되고 실행된다. - 함수내부에서 선언된 변수는 외부에서 참조할 수 없다. - 프로그래밍 언어에서는 스코프를 통해 식자 이름의 충돌을 방지하고, 같은 이름을 사용할 수 있게 한다. - 스코프는 네임스페이스이다. * var키워드 변수의 중복선언 => v..

12. 함수

1. 함수란? - 함수는 일련의 과정을 문으로 구현하고 코드블록으로 감싸서 하나의 실행 단위로 정의한 것이다. - 입력받는 변수를 매개변수(parameter), 입력을 인수(argument), 출력을 반환값이라 한다. - 함수는 값이며 여러 개 존재할 수 있으므로 식별자인 함수 이름을 사용할 수 있다. - 함수는 함수 정의를 통해 생성한다. - 인수를 매개변수를 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시해야하는데, 이를 함수의 호출이라 한다. 2. 함수를 사용하는 이유 - 함수는 코드의 재사용측면에서 매우 유용하다 (여러번 호출할 수 있기 때문) - 유지보수의 편의성을 높이고, 신뢰성을 높이는 효과가 있다. - 함수이름을 적절히 짓는다면 코드의 가독성을 향상시킨다. 3. 함수 리터럴 - 함수 ..

11. 원시 값과 객체의 비교

- 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다. - 객체를 변수에 할당하면 참조값이 저장된다. - 원시값을 갖는 변수를 다른변수에 할당하면 원시 값이 복사되어 전달된다. => pass by value - 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달된다 -> pass by reference 1. 원시 값 1.1 변경 불가능한 값 - 원시타입은 변경 불가능한 값을 갖는다. - 변경 불가능하다는 것은 변수가 아니라 값에 대한 진술이다. - 변수에 재할당하면 변수 값을 변경(실제로는 교체) 할 수 있다. 1.2 문자열과 불변성 - ECMAScript 사양에서 문자열(2바이트)과 숫자(8바이트) 이외의 원시 타입은 크기를 규정하고 있지 않다. - 문자열은 몇개의 문자로..

10. 객체 리터럴

1. 객체란? - 자바스크립트는 원시값을 제외한 나머지값은 모두 객체이다. - 원시타입은 immutable value이지만 객체는 mutable value이다. - 객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 key (프로퍼티 키)와 value (프로퍼티 값)로 구성된다. - 자바스크립트의 모든 값은 프로퍼티 값이 될 수 있다. (함수도 일급 객체이므로 취급할 수 있다.) * 일급객체 : 타입을 전달, 반환 및 할당 할 수 있는 경우 해당타입을 1급 객체로 간주한다. - 프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해서 메서드라고 부른다. - 객체는 프로퍼티와 메서드로 구성된 집합체다. - 프로퍼티: 객체의 상태를 나타내는 값(data) - 메서드 : 프로퍼티를 참조하고 조작할 수 있..

9. 타입 변환과 단축 평가

1. 타입 변환이란? - 개발자가 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환 또는 타입 캐스팅이라 한다. - 표현식을 평가하는 도중 엔진에 의해 암묵적으로 타입이 변환되는 것을 암묵적 타입 변환 또는 타입 강제 변환이라 한다. - 타입변환은 기존의 원시 값을 변경하는 것이 아니다. (immutable value이므로) 새로운 원시 값을 생성하는것 2. 암묵적 타입 변환 - ex) '10' + 2 // '102' - ex) !0 // ->true 2.1 문자열 타입으로 변환 - 피연산자중 하나 이상이 문자열일 때 주로 발생한다. - 템플릿 리터럴의 표현식 삽입은 평가 결과를 문자열 타입으로 암묵적 타입 변경한다. 2.2 숫자 타입으로 변경 - 피연산자를 숫자 타입으로 변환할 수 없는경우 NaN..

8. 제어문

- 조건에 따라 코드블록을 실행하거나 반복할 때 사용한다 (조건문 / 반복문) 1. 블록문 - 0개 이상의 문을 중괄호로 묶은 것으로 코드 블록 또는 블록으로 부른다. - JS는 블록문을 하나의 실행 단위로 취급. - 단독사용도 가능하나 일반적으로 제어문이나 함수를 정의할때 사용. - 블록문은 자체 종결성을 갖기 때문에 세미콜론을 붙이지 않는다. 2. 조건문 - 조건식의 평가 결과에 따라 코드 블록의 실행을 결정한다. - if..else문과 switch문 제공. 2.1 if...else문 - 조건식의 논리적 참/거짓에 따라 실행할 코드 블록이 결정된다. - if문의 조건식은 불리언으로 평가되어야 한다. - if의 조건식이 boolean이 아닌 값으로 평가되면 자바스크립트 엔진에 의해 암묵적으로 타입이 강..

7. 연산자

- 피연산자는 값으로 평가될 수 있는 표현식이어야 한다. - 피연산자를 연산하여 새로운 값을 만드는 동사 역활. 1. 산술연산자 - 산술연산이 불가능한 경우 NaN을 반환. 1.1 이항 산술 연산자 - 2개의 피연산자를 산술 연산해 숫자 값을 만든다. - 피연산자의 값을 변경하는 효과는 없다. 1.2 단항 산술 연산자 (++, --, +, -) - 1개의 피연산자를 연산해 숫자 값을 만든다. - 피연산자의 값을 변환하는 부수효과가 있다. 1.3 문자열 연결 연산자 (+) - 피연산자중 하나 이상이 문자열인 경우 문자열을 이어준다. - true/false, null 등은 강제로 타입이 바뀐다(문자열 형식의 1또는 0 ) 2. 할당 연산자 - 우항에 있는 피연산자의 평가 결과를 좌항의 변수에 할당한다. - ..

6. 데이터 타입

- 자바스크립트(ES6)는7개의 데이터 타입을 제공한다. - 7개의 데이터 타입은 원시타입(primitive type)과 객체 타입(object/reference type)으로 분류된다. 1. 숫자 타입 (Number) - 숫자 타입은 배정밀도 64비트 부동소수점 형식을 따른다 => 모든 수를 실수로 처리하며, 정수만을 표현하기위한 데이터 타입은 존재하지 않음. - 자바스크립트는 2,8,16진수를 위한 데이터 타입을 제공하지 않기 떄문에 이들 값을 참조하면 모두 10진수로 해석된다. - 숫자 타입은 추가적으로 3가지 특별한 값도 표현할 수 있다. 1) Infinity: 양의 무한대 2) -Infinity: 음의 무한대 3) NaN: 산술 연산 불가 (Not a Number) - 자바스크립트는 대소문자를 ..