모카 Mocha 라는 이름으로 넷스케이프 내비게이터 2에 탑재되었다가, 그해 9월 라이브스크립트 LiveScript로 이름을 바꾼다. 그리고 12월에 최종적으로 자바스크립트 JavaScript로 바뀌게 된다.
하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이다. 즉, 값의 위치를 가리키는 상징적인 이름이다. 변수 이름을 식별자라고도 한다. 식별자는 값이 아닌 메모리 주소를 기억하고 있다.
값은 식(표현식)이 평가되어 생성된 결과이다. 리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다. 표현식은 값으로 평가될 수 있는 문이다.
자바스크립트는 7개의 데이터 타입을 제공한다. 자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다. 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다
산술 연산자는 피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만든다. 연산이 불가능하면 NaN을 반환한다.\+ : 단순히 숫자타입으로 반환한 값을 생성해서 반환한다.\- : 단순히 부호를 반전한다. (숫자타입으로 변환한 후)
위와 같이 개발자의 의도와는 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 것을 암묵적 타입 변환 또는 타입 강제 변환이라 한다.
자바스크립트는 객체기반의 프로그래밍 언어이며, 자바스크립트를 구성하는 거의 모든 것이 객체이다.객체는 0개 이상의 프로퍼티로 구성된 집합이다. 프로퍼티는 키-값으로 구성된다.함수도 프로퍼티 값으로 사용할 수 있다.
원시 타입 vs 객체 타입 원시 타입의 값, 즉 원시 값은 변경 불가능한 값이다. 원시 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장된다. 객체 타입의 값, 즉 객체는 변경 가능한 값이다. 객체를 변수에 할당하면, 변수(확보된 메모리 공간)에는
프로그래밍 언어의 함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행단위로 정의한 것이다.함수는 함수 정의를 통해 생성, 함수 호출을 실행한다.코드의 재사용성유지보수의 편의성코드의 신뢰성코드의 가독성자바스크립트의 함수는 객체 타입의 값이다.
모든 식별자는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결전된다. 이 유효 범위를 스코프라고 한다.
지역변수의 생명 주기는 함수의 생명 주기와 일치한다.하지만, 지역 변수가 함수보다 오래 생존하는 경우도 있다.함수가 생성한 스코프는 렉시컬 환경이라 부르는 물리적인 실체로 존재한다. 따라서, 변수는 자신이 등록된 스코프가 소멸(메모리 해제)될 때 까지 유효하다.
var 키워드로 선언한 변수는 중복 선언이 가능하다.var 키워드로 선언한 변수는 오로직 함수의 코드 블록만을 지역 스코프로 인정한다.따라서, 함수 외부에서 선언된 변수는 모두 전역 변수가 된다.
내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티(pseudi property)와 의사 메서드(pseudo method)다.
생성자 함수란 new 연산자와 함께 호출해 객체(인스턴스)를 생성하는 함수이다.생성자 함수에 의해 생성된 객체를 인스턴스라 한다.일반 함수와 동일한 방법으로 생성하고, new 연산자와 함께 호출하면 생성자 함수로 동작한다.
무명의 리터럴로 생성이 가능, 즉 런타임에 생성이 가능하고,변수나 자료구조(객체나 배열)에 저장할 수 있고,함수의 매겨변수로 전달될 수 있으며,함수의 반환값으로 사용될 수 있는 객체를 일급 객체라고 하며, 자바스크립트의 함수는 위 조건을 모두 만족하므로 일급 객체이다.
자바스크립트는명령형 프로그래밍함수형 프로그래밍프로토타입 기반 객체지향 프로그래밍을 지원하는 멀티 패러다임 프로그래밍 언어이다.
Person 생성자 함수에 의해 생성된 me 객체는 Object.prototype의 메서드인 hasOwnPrototype를 호출할 수 있다.
ES5부터 strict mode가 추가되었다. 이는 잠재적인 오류를 발생시킬 수 있는 코드들에 명시적인 에러를 발생시킨다. 전역의 선두 또는 함수 몸체의 선두에 'use strict';를 추가한다.
자바스크립트 객체는 크게 3개, 표준 빌트인 객체, 호스트 객체, 사용자 정의 객체로 분류할 수 있다.
객체는 상태(State)를 나타내는 프로퍼티와 동작(behavior)를 나타내는 메서드를 하나의 논리적인 단위로 묶은 복합적인 자료구조다. 메서드는 자신이 속한 객체의 상태, 즉 프로퍼티를 참조하고 변경할 수 있어야 한다.
실행 컨텍스트는 자바스크립트의 동작 원리를 담고 있는 핵심 개념이다. 실행 컨텍스트를 바르게 이해하면 자바스크립트가 스코프를 기반으로 식별자와 식별자에 바인딩된 값을 관리하는 방식과 호이스팅이 발생하는 이유, 클로저의 동작 방식 등을 이해할 수 있다.
클로저는 함수와 그 함수가 선언된 렉시컬 환경과의 조합이다. 외부 함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 이미 생명 주기가 종료된 외부 함수의 변수를 참조할 수 있다. 이러한 중첩 함수를 클로저라고 부른다.
자바스크립트는 클래스가 필요하지 않은 프로토타입 기반 객체지향 언어이다. ES6 에서는 클래스가 도입되었으며, 클래스 기반 객체지향 프로그래밍 언어와 흡사한 새로운 객체 생성 메커니즘을 제공한다.
ES6 이전까지 자바스크립트의 함수는 별다른 구분 없이 사용되었다. 즉, ES6 이전의 모든 함수는 일반 함수로서 호출할 수 있으면서, 생성자 함수로서 호출할 수 있다. ES6 에서는 함수를 사용 목적에 따라 세가지 종류로 명확히 구분한다.
배열은 순차적으로 나열한 자료구조다. 자바스크립트에는 배열이라는 타입은 존재하지 않는다. 배열은 객체 타입이다.
표준 빌트인 객체인 Number 객체는 생성자 함수 객체다. 따라서 new 연산자와 함께 호출하여 Number 인스턴스를 생성할 수 있다.
Math 는 생성자 함수가 아니다. 표준 빌트인 객체인 Math 정적 프로퍼티와 정적 메소드만 제공한다. Date 는 빌트인 객체이면서 동시에 생성자 함수다.