스코프란?
[ 변수의 유효범위 ]
변수에 접근할 수 있는 범위가 존재한다. 중괄호(블록) 안쪽에 변수가 선언되었는가, 바깥쪽에 변수가 선언되었는가가 중요. 이 범위를 스코프라고 한다.
스코프는 중첩이 가능
, 스코프는 마치 중첩된 울타리와 같다.
가장 바깥쪽의 스코프는 전역 스코프
전역이 아닌 다른 스코프는 전부 지역 스코프
지역 변수는 전역 변수보다 더 높은 우선순위를 가진다.
블록 스코프(block scope)
는 중괄호를 기준으로 범위가 구분
함수 스코프
function 키워드가 등장하는 함수 선언식 및 함수 표현식
화살표 함수는 블록 스코프로 취급
전역 변수
는 가장 바깥 스코프에 정의한 변수. 따라서, 어디서든 접근이 가능. 전역 변수를 많이 만드는 것은 그다지 좋은 선택이 아니다.
너도나도 똑같은 이름으로 전역 변수를 선언하려고 한다면 분명 문제가 발생할 것이다. 이를 side effect라고 한다. 전역 변수를 최소화하는 것은 side effect를 줄이는 좋은 방법
선언 없이 변수를 할당하지 마세요. 선언 없이 변수를 할당하면, 해당 변수는 var로 선언한 전역 변수처럼 취급
Strict Mode는 브라우저가 보다 엄격하게 작동하도록 만들어준다. js 파일 상단에 'use strict'
라고 입력
var 키워드는 for 문이 만들어낸 블록 스코프를 무시하고, 함수 스코프만 따른다.
let과 const를 주로 사용
전역 변수를 var로 선언하는 것은 브라우저의 내장 기능을 사용하지 못하게 만들 수도 있다.
보통 코드를 작성할 때 블록은 들여쓰기가 적용되고, 그 구분이 시각적으로 분명. 따라서 많은 사람들은 블록 스코프를 기준으로 코드를 작성하고, 생각하기 마련. 그러나 var는 이 규칙을 무시하므로, 코드를 작성하는 사람이 블록 스코프/함수 스코프에 대한 이해가 없으면 코드가 다소 혼란스러울 수 있다.
var 보다는 let 으로 변수 선언을 하는 것을 권장
let 키워드는 재선언을 방지
변하지 않는 값, 곧 상수(constant)를 정의할 때에는 const를 이용
const는 값의 재할당이 불가능
let, const와 var의 차이점은 무엇보다 유효범위에 있다는 점