📝 정리한 문서
JavaScript는 현재 많은 애플리케이션들에 사용되고 있어서 기술에 대한 지식이 중요한 기량이 된다.
JavaScript는 1995년 Netscape의 엔지니어 Brendan Eich에 의해 만들어졌고 1996년 초에 Netscape2와 함께 처음 릴리즈 되었다. 원래 LiveScript로 불리기로 되어 있었으나 Java 언어의 성공에 편승해보기 위해 마케팅 결정에 따라 이름이 변경되었다. (햄과 햄스터가 상관없는 것처럼, 두 언어 사이의 공통점이 매우 적음에도 불구하고 JavaScript라는 이름으로 불리게 되면서 혼란을 일으켰다.)
JavaScript는 유형 및 연산자, 표준 내장 객체 및 메서드가 있는 다중 패러다임, 동적 언어이다. 구문은 Java 및 C 언어를 기반으로 하며 이러한 언어들의 많은 구조가 JavaScript에도 적용된다. JavaScript는 클래스 대신 객체 프로토 타입을 사용하여 객체 지향 프로그래밍을 지원한다. 함수는 객체이며, 함수는 실행 가능한 코드를 유지하고 다른 객체와 마찬가지로 전달 될 수 있다.
수(number), BigInt, 문자열(String), 부울(Boolean), 함수(Function), 객체(Object), 기호(Symbol)-ES2015에 새롭게 추가와 *undifined와 null이 있다. 또한 객체의 특별한 종류인 배열(Array) 객체, 날짜(Date) 객체와 정규식(RegExp) 객체가 있다. (정확히 말하자면 기술적으로 함수는 단지 객체의 특별한 타입으로 취급된다.)
정리하자면
새로운 변수는 let, const, var 키워드로 선언된다.
let은 블록 레벨 변수를 선언할 수 있다. 선언된 변수는 "변수가 선언된 블록"에서 사용가능하다.
const는 값이 변경되지 않을 변수를 선언할 수 있다.(변경 불가) "변수가 선언된 블록"에서 사용할 수 있다.
var는 let, const 키워드가 가지는 제한이 없다. "변수가 선언된 함수"에서 사용가능하다.
사칙연산, /,%, 비교 연산자, 증감 연산자, 논리 연산자, 삼항 연산자 등
※ for...of와 for...in
for (let value of array) {
// value로 작업을 실행합니다
}
for (let property in object) {
// object의 항목(property)으로 작업을 실행합니다
}
간단히 말하자면 이름-값 쌍의 모임이다. 다른 언어로 예를 들자면 Python의 Dictionaries, Perl과 Ruby의 Hashes, C와 C++ 의 Hash tables등과 같다.
빈 객체 생성에는 두 가지 방법이 있다.
array.length는 배열에 들어있는 항목의 개수가 아님을 주의하자. length 속성은 최대 인덱스에 하나를 더한 값일 뿐이라는 걸 기억해두자.
var a = ['dog', 'cat', 'hen'];
a[100] = 'fox';
a.length; // 101
0개 이상의 이름이 있는 매개변수를 가질 수 있다.
// 괄호 앞에 함수명이 없음을 주목해주세요.
let avg = function() {
let sum = 0;
for (const item of arguments) {
sum += item;
}
return sum / arguments.length;
};
클로저는 JavaScript가 제공하는 가장 강력한 추상화이며, 동시에 잠재적으로 가장 혼란스러울 수 있는 개념이다.
function makeAdder(a) {
return function(b) {
return a + b;
};
}
var add5 = makeAdder(5);
var add20 = makeAdder(20);
add5(6); // ?
add20(7); // ?
여기서 일어나는 일은 함수 내부에서 정의된 어떤 함수가 외부 함수의 변수에 접근한다는 점에서 앞서 언급한 내장 함수에서 일어나는 일과 매우 비슷하다. 유일하게 다른 점은 내장 함수가 반환되었기 때문에 외부 함수의 변수는 사라지는 것처럼 보인다는 것이다. 하지만, 외부 함수의 변수들은 여전히 "존재한다". 그렇지 않다면 'adder' 함수는 동작하지 않을 것이다. 이에 더해서 makeAdder() 지역 변수의 다른 두 "복사본"이 존재한다. 하나는 a는 5이고, 다른 하나의 a는 20이 된다. 따라서 해당 함수를 호출한 결과는 다음과 같다.
add5(6); // returns 11
add20(7); // returns 27