JavaScript/다른 언어와의 관계
프로그래밍 경험이나 다른 언어로 교육받은 경험이 있다면 자바 스크립트를 배우는 것은 더 쉽기도, 동시에 더 어렵기도 하다. 특히 자바 또는 C++과 같은 언어에 익숙하다면 산술 및 제어 논리의 대부분은 동일하다.
변수의 동작
변수 유효범위
- 모듈과 모듈 사이에서
- 자바에서 키워드
public
,private
,protected
는 다른 모듈(클래스)에서 변수가 보일지 말지를 정의한다. 자바스크립트에는export/import
만 있다.module.exports/require
매커니즘을 사용한다. - 모듈 안에서
- 모듈 안에서 변수의 가시성은 키워드
let
과const
로 정의한다.(var
는 더 이상 쓰지 말자.) 자바스크립트const
는 자바final
과 같다. - 블록 안에서
- 코드를 중괄호로 감싼 것을 블록(Blocks)이라고 한다. 블록 안에서 정의한 변수는 블록 안 어디에서나 보이지만 블록 밖에서 정의한 것은 블록 안에서 안 보인다. 블록 가시성은 자바스크립트와 자바가 같다.
- 클로저
- 클로저(closure)는 익명 또는 이름 있는 함수로, 자신을 둘러싼 컨텍스트의 변수를 참조할 수 있다. 함수는 생성 시점의 변수 값은 볼 수 있지만 호출 시점의 값은 보지 못한다. 자바스크립트는 일찍부터 클로저를 사용했다. 자바도 내부 클래스와 람다 표현식으로 비슷한 기술을 사용한다.
클래스
자바와 달리 자바스크립트에는 클래스가 없다. 대신 자바스크립트에서는 상속 같은 객체지향 기능을 구현하기 위해 프로토타입을 사용한다. 클래스를 따라할 수는 있지만 단지 ‘문법 설탕’일 뿐이다. 머리속에서 클래스를 지우면 자바스크립트를 더 쉽게 배울 수 있을 것이다.