[JavaScript] 입문 / 변수
HTML CSS와 함께 웹 개발에 사용되는 요소이며, 앞의 두 요소와 다르게 JavaScript는 프로그래밍 언어이다.
웹페이지 제작 뿐만 아니라 React Electron등 다양한 프레임워크를 사용해 머신러닝 / 모바일 앱 개발 / 서버 개발 등 여러 분야에 사용할 수 있다.
변수
JavaScript에서는 변수를 지정할 때 키워드가 따라붙는다.
- var : 재선언 가능 / 재할당 가능
- let : 재선언 금지 / 재할당 가능
- const : 재선언 금지 / 재할당 금지
var을 사용할 때는 조심해야 한다.
자바나 C에서 변수를 선언하게 되면, 코드 블록에 의해서 지역 스코프가 생성되는데, (블록 레벨 스코프) 자바스크립트에서 변수를 선언할 때 var은 함수의 코드 블록만을 지역 스코프로 인정한다.
if(true){
var a = 1;
if(true){
var b = 2;
}
}
console.log(a);
console.log(b);
위와 같은 코드를 작성해도 오류가 나타나지 않는다는 이야기이다. if문 안에서 선언된 a와b도 모두 전역 변수가 된다.
게다가 var은 변수의 중복 선언까지 허용하기 때문에 의도하지 않은 변수의 수정이 일어날 수 있다.
이런 이유로 var대신 let과 const를 사용하기를 권장하고 있다.
인터프리터 언어
JavaScript는 기본적으로 컴파일 작업을 수행하지 않는 인터프리터 언어이지만, 여러 엔진들은 인터프리터 언어의 장점과 컴파일러 언어의 장점을 결합해 JavaScript의 성능을 개선했다.
근본적으로는 인터프리터 언어이기 때문에, 작성한 코드는 한 줄씩 순차적으로 실행된다. 하지만...
alert(something);
const something;
위와 같은 코드를 실행시키면, undefined가 출력된다.
자바스크립트 엔진은 소스코드를 한 줄씩 읽어들이기 전에 소스코드를 평가하는 과정을 거친다.
이때 모든 선언문을 먼저 실행시키기 때문에, 변수 something은 선언되고 undefined를 할당받게 된다.
(undefined는 기본값으로 생각하자. 자바에서 int의 기본값은 0이고 char의 기본값은 '' 인 것 처럼..)
때문에 에러 대신 undefined가 출력되는데, 선언문이 코드의 최상단으로 올려진 것 처럼 동작하는 자바스크립트의 성질을 변수 호이스팅이라고 한다.
const something = 10;
위처럼 코드를 작성했을 때, 평가하는 과정에서 something을 선언하고 undefined를 할당시킨다.
그 다음 소스코드를 한 줄씩 읽어드리면서 해당 코드를 읽을 때 something에 10을 할당한다.
var something;
something = 10;
something = 20;
위처럼 할당한 변수에 대해 값을 변경했을 경우, 더 이상 사용되지 않는 값들은 가비지 컬렉터가 처리해준다.
C언어와는 달리 자바스크립트는 자바처럼 메모리 관리를 언어 차원에서 담당하고 있는 매니지드 언어이다.
ECMAScript
JavaScript를 ECMAScript언어라고 부르는 경우도 있는데, 이는 ECMA가 JavaScript의 문법을 규정하기 때문이다. 즉, 정확하게 표현하면 JavaScript는 ECMAScript를 포함하는 관계이다.
2015년에 ES6이 확립되며 자바스크립트에 객체지향 개념이 적립됐으며, 2015이후부터는 1년마다 한 번씩 간단한 업데이트만 진행되고 있는 상황이다.
이렇듯 자바스크립트는 브라우저를 위한 프로그래밍 언어이기도 하면서 서버를 위한 프로그래밍 언어이기도 하다. Node.js환경과 브라우저 환경에서 자바스크립트의 역할을 알아두자.
Web API / Node.js
브라우저 환경과 Node.js환경 모두 ECMA를 지원해 문법은 같지만, Web API는 브라우저 환경에서만 지원하고 Node.js환경에서는 Node.js고유의 API를 지원한다.
'Programming Language > JavaScript' 카테고리의 다른 글
[JavaScript] 스코프 (0) | 2022.03.10 |
---|---|
[JavaScript] 함수 (0) | 2022.03.10 |
[JavaScript] 타입 변환 / 단축 평가 (0) | 2022.03.08 |
[JavaScript] 연산자 / 제어문 (0) | 2022.03.08 |
[JavaScript] 리터럴 / 타입 (0) | 2022.03.07 |
댓글
이 글 공유하기
다른 글
-
[JavaScript] 함수
[JavaScript] 함수
2022.03.10 -
[JavaScript] 타입 변환 / 단축 평가
[JavaScript] 타입 변환 / 단축 평가
2022.03.08 -
[JavaScript] 연산자 / 제어문
[JavaScript] 연산자 / 제어문
2022.03.08 -
[JavaScript] 리터럴 / 타입
[JavaScript] 리터럴 / 타입
2022.03.07