number, string, boolean, null, undefiend 같은 고정된 저장 공간을 차지하고 하나의 데이터를 담는 자료형을 원시자료형(primitive data type)이라고 한다.
대량의 데이터를 다루기에 적합한 배열과 객체, 함수는 참조자료형(reference data type)이라고 한다.
스코프는 범위라는 뜻으로 변수에 접근할 수 있는 범위를 가리킨다. 스코프는 중괄호(블록) 또는 함수에 의해 나눠지고 중첩이 가능하다.
전역 스코프는 전역에 선언되어 있어 어디서든 해당 변수에 접근할 수 있다.
지역 스코프는 해당 지역에서만 접근할 수 있으며 전역 변수보다 우선순위가 높다.
for(let key in obj){
if(isBoolean){ // 블록 스코프
let type = "Boolean";
return `타입은 ${type}입니다!`;
}
}
function hello(){ // 함수 스코프
let name = "Tom";
return `Hello ${name}`
}
🚨 주의
- 화살표 함수는 블록 스코프 취급이 된다.
var
는 블록 스코프를 무시하고 함수 스코프(+화살표 함수)를 따른다.
window는 브라우저 창을 대표하는 객체지만 브라우저 창과 상관없이 전역 항목도 담고 있다. var
로 선언된 전역 변수 및 전역 함수는 window 객체에 속한다.
🚨 주의
- 선언 키워드 없이 변수를 할당하면
var
로 선언한 전역 변수 취급이 된다.
👉strict mode
를 통해 예방할 수 있다. js 파일 상단에use strict
를 입력하기- vaar로 선언한 전역 변수가 윈도우 기능을 덮어씌워 내장 기능을 못쓰게 될 수 있다.
👉let
을 사용하는 것을 권장- 전역 변수를 많이 선언하면 편리하지만 다른 함수, 로직에 의해 의도치 않은 상황이 발생할 수 있다(side effect)