데이터를 저장하는 방식에 따른 분류
const name = eunji;
const num = 111;
"good morning"
"nice try"
// 여기서 둘다 변경될 수 없는 고정된 값임
let word = "good morning";
word = "nice try";
// 하지만 변수에 재할당해 변수 내용을 변경하는 것은 가능함.
const word = "good morning";
word = "nice try"; //에러 발생
// const는 변수 재할당이 불가능함.
대량의 데이터를 다루기에 적합한 배열, 객체, 함수가 대표적이다.
주소를 참조한 것이기 때문에 복사본의 데이터에도 영향이 간다.
따로 자료 구조를 구현한 이유는 변수에 넣을 수 있는 원시형에서는 데이터 크기가 제한되기 때문이다.
원시형과 달리 참조형은 별도의 데이터함에 저장되고 이 데이터 보관함에서는 자기 마음대로 사이즈를 늘렸다가 줄였다가 하는데(동적이라고 할 수 있다) 이를 heap 이라고 한다.
안쪽 스코프에서 바깥쪽 스코프로는 접근할 수 있지만 반대는 불가능하다.
스코프는 중첩이 가능하다.
전역 스코프(Global Scope) : 가장 바깥쪽의 스코프
지역 스코프 (local scope) : 전역이 아닌 다른 스코프 전부
지역 스코프 에 선언한 변수는 지역 변수, 전역 스코프 에 선언한 변수는 전역 변수
지역 스코프 는 전역 스코프 보다 더 높은 우선순위를 가짐
전역 변수: 어디서든 접근 가능한 변수이기 때문에 편리한 대신, 다른 함수 혹은 로직에 의해 의도되지 않은 변경이 발생할 수 있음 -> 부수 효과(side effect) 발생
1. 블록 스코프(blck scope)
2. 함수 스코프(function scope)
var
키워드
let
키워드
let
키워드 사용이 권장된다. const
키워드
이를 표로 정리하면
let | const | var | |
---|---|---|---|
유효범위 | 블록스코프 및 함수 스코프 | 블록 스코프 및 함수 스코프 | 함수 스코프 |
값 재할당 | 가능 | 불가능 | 가능 |
재선언 | 불가능 | 불가능 | 가능 |
function showName() {
// name은 전역 변수로 취급됨.
name = eunji;
console.log(name); // eunji
}
showName();
console.log(name); // eunji
console.log(window.name); //eunji
-> name은 선언한 적은 없어도 값을 할당하며 마치 var로 선언된 전역 변수처럼 작동함.
'use strict';