자바스크립트 개발 환경과 실행 방법
자바스크립트 = ES + Web API
Node.js : ES + Node.js API
자바스크립트는 브라우저에서 HTML, CSS와 함께 실행
렌더링엔진 : HTML, CSS
자바스크립트 엔진 : 자바스크립트
HTML 파서는 script 태그를 만나면 DOM 생성 프로세스를 중지하고 자바스크립트 엔진으로 제어 권한을 넘김
자바스크립트의 실행이 완료되면 다시 HTML 파서로 제어권한을 넘겨서 브라우저가 중지했던 시점부터 DOM생성을 재개
DOM이 완성되지 않은 상태에서 자바스크립트가 DOM을 조작하면 애러가 발생할 수 있다.
변수
변수 : 하나의 값을 저장할 수 있는 메모리 공간에 붙인 이름 또는 메모리 공간 자체
할당 : 변수에 값을 저장하는 것
참조 : 변수에 저장된 값을 읽어 들이는 것
식별자 : 변수명, 어떤 값을 구별하여 식별해낼 수 있는 고유한 이름
변수선언 : 변수명을 등록하여 자바스크립트 엔진에 변수의 존재를 알려 관리하도록 하는 것
키워드 : 자바스크립트 엔진이 수행 할 동작을 규정한 일종의 명령어
변수선언
- 선언단계
- 초기화 단계 : 암묵적 undefined 할당
var 키워드 사용시 선언단계와 초기화 단계가 동시 진행
초기화 : 변수가 선언된 후 최초 값을 할당하는 것
호이스팅 : 자바스크립트 엔진은 소스 코드를 한줄씩 순차적으로 실행하기 전 소스코드 전체의 모든 선언문을 찾아내어 식별자를 등록하고 초기화, 그 후 소스코드 순차 실행
변수 선언과 값의 할당을 하나의 문으로 축약가능
재할당 : var 키워드로 선언한 변수는 값을 재할당 가능
상수 : 변수에 저장된 값을 변경할 수 없는 것
데이터 타입
데이터 타입 : 값의 종류
메모리에 값을 저장하기 위해서는 확보해야 할 메모리 공간의 크기 파악, 값의 종류에 따라 확보해야 할 메모리의 크기가 다름 -> 몇 byte의 공간을 사용해야 손실없이 값을 저장할 수 있는지 알아야 함을 의미
자바스크립트는 모든 숫자 타입을 64비트 부동소수점으로 저장
필요
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정
- 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정
- 메모리에서 읽어들은 2진수를 어떻게 해설할 지 결정
값
- 더이상 평가할 수 없는 하나의 표현식
- 다양한 방법(표현식)으로 생성가능
- 가장 기본적 방법은 리터럴 표기법
리터럴
- 소스코드 안에서 직접 만들어 낸 고정된 값 자체
- 리터럴 표기법으로 생성
값과 리터럴
- 표현식 : 값을 생성하는 문, 하나의 값으로 평가될 수 있는 문
- 리터럴은 값의 최소단위
- 리터럴은 값이 될 수 있지만 모든 값은 리터럴이 아님
종류
- 원시타입
- 객체타입
null : 변수에 값이 없다는 것을 의도적으로 명시, 변수가 기억하는 메모리 주소에 대한 참조 정보를 제거하는 것을 의미
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정
재할당에 의해 변수의 타입은 언제든지 동적으로 변화 -> 동적 타이핑
변수의 수가 많을수록 오류의 발생 활률은 상승
변수의 생명주기는 최대한 짧게
변수보다는 상수를 사용하여 값의 변경을 억제
변수명은 변수의 존재 이유를 파악할 수 있도록 명명
연산자
표현식은 리터럴 표현식, 식별자 표현식, 연산자 표현식, 함수/메소드 호출 표현식 등으로 나누어지지만 결국 하나의 값을 만듬
표현식 = 표현식이 평가되어 생성된 값 -> 동치
문(statement) : 자바스크립트 엔진에게 내리는 명령
자바스크립트 코드 = 문 or 표현식
표현식은 값을 생성
문은 표현식으로 생성한 값을 사용하여 자바스크립트 엔진에게 명령을 내리는 것
문 = 표현식인 문, 표현식이 아닌 문 존재
표현식이 아닌 문은 값이 될 수 없기에 값처럼 사용 불가
할당문은 그 자체가 표현식으로 값처럼 사용 가능
삼항연산자는 값으로 평가할 수 있는 표현식인 문
if문은 표현식이 나닌 문으로 값으로 사용불가능 하여 삼항연산자로 사용 불가
고찰
Javascript의 모든 변수는 상수인가?
Javascript에서 값을 재할당 하는 경우 메모리의 주소값이 변경.
식별자는 동일해도 해당 식별자가 참조하는 메모리의 공간은 바뀌는 것이고 결국 할당된 메모리 영역에 값을 바꾸는게 아니라 새로운 할당이 일어나는 것과 같은데 그러면 하나의 값을 저장할 수 있는 메모리 공간에 붙인 이름 또는 메모리 공간 자체라는 의미에서 자바스크립트의 모든 변수는 상수인가?null타입의 값 null을 할당하면 식별자에 메모리 참조가 없어지면 식별자의 주소는 없는건가?
null도 null타입의 값 null로 값으로 표현하는데 null을 할당하면 식별자의 참조가 사라지는데 그러면 참조가 사라진 식별자는 아무것도 참조를 안하는건지 아니면 null값이 들어있는 새로운 공간을 참조하고 기존 참조하던 공간이 참조가 없으면 가비지컬렉션 수행으로 사라지는건가?
참조가 없어지는거라면 null값을 주는게 아니라 아스키 0번을 변수에 주면 어떻게 되나?이항산술연산자 +와 단항 산술연산자 +는 다른건가?
0 + true = +true = 1인데 두 연산이 아예 다른 의미의 연산인가?