(string, number, boolean 등)
하나의 변수에 하나의 데이터(값)가 들어가는 데이터
(배열, 객체, 함수 등)
하나의 변수에 하나의 데이터(주소)가 들어가는 데이터, 주소만 참조하므로 동적으로 크기가 변한다.
스코프는 변수에 접근할 수 있는 범위를 말한다. 중괄호(블록) 안쪽에 변수가 선언되었는가, 바깥쪽에 변수가 선언되었는가가 중요하다. 이 범위를 우리는 스코프라고 부른다.
let username = 'coding';
let (username) {
let message = `Hello, ${username}`;
console.log(message); // 'Hello coding'
}
console.log(message); // ReferenceError
상단의 코드에서 username은 전역적으로 선언되어(바깥쪽에서 선언되어) 어디서든 사용할 수 있지만, message는 함수 안에서 선언되어(중괄호 안쪽에 선언) 함수 안에서만 사용할 수 있다.
if (true) {
let message = '사실입니다.';
console.log(message);
}
let getAge = user => { return user.age; } // 화살표 함수는 블록 스코프로 취급한다. 그러므로 user부터 끝까지 블록 스코프 취급
function getName(user) { // 모두 함수 스코프
return user.name;
}
let getAge = function(user) { // 앞의 let getAge = 부분을 제외하고 모두 함수 스코프
return user.age;
}
var 키워드
var 키워드로 정의한 변수는 블록 스코프를 무시하고, 함수 스코프만 따른다(for문 스코프,if문 스코프 무시하고 전역으로 만들어버림). 근데 또 화살표 함수의 블록 스코프는 무시하지 않는다.
보너스로 개발자 도구에서 breakpoint 사용해서 스코프 확인하는 법