let username = 'kimcoding';
let myname = 'heoboogie'
if (username) {
let message = `Hello, ${username}!`;
console.log(message); // 'Hello, kimcoding!'
console.log(myname); // 'heoboogie'
// *블록 밖에서 선언된 변수(바깥 스코프)는 안쪽에서 접근이 가능함
}
console.log(message); // referenceError;
// *블록 안에서 선언된 변수(안쪽 스코프)는 바깥에서 접근이 불가능함
이처럼 변수에 접근할 수 있는 범위가 존재합니다. 중괄호 안쪽에 변수가 선언되었는가, 바깥쪽에 변수가 선언되었는가가 중요합니다. 이 범위를 우리는 스코프라고 부릅니다.
스코프에는 두가지 종류가 있습니다.
먼저, 중괄호를 기준으로 범위를 구분하는 블록 스코프가 있습니다.
블록 스코프 내에서 선언된 변수는 블록 범위를 벗어나는 즉시 접근 할 수 없습니다.
그 다음으로 function 키워드가 등장하는 함수 선언식 및 함수 표현식은 함수 스코프를 만듭니다.
함수 스코프 내에서 선언된 변수는 함수의 실행부터 종료까지 접근 할 수 있습니다.
*주의할 점: 화살표 함수는 함수 스코프가 아닌 블록 스코프로 취급됩니다.
var 키워드로 선언된 변수는 화살표 함수를 제외한 모든 블록 스코프를 무시하며 함수 스코프만 따릅니다.
선언 키워드 없는 선언은 전역 변수로 취급됩니다.
var 키워드로 선언된 변수가 의도치않게 다른 곳에 접근하는 것을 막기 위해 let 키워드 사용을 권장합니다. 또한 let 키워드는 재선언하는 것을 막아주기도 합니다.
함수 스코프는 함수의 실행부터 종료까지이고, var 선언은 함수 스코프의 최상단에 선언됩니다. 선언 키워드 없는 선언은 최고 스코프에 선언됩니다.
let과 const의 차이는 설명해놓은 글을 참고하실 수 있습니다.
https://velog.io/@heojeong_/JS-let-const
여러 문제들을 사전에 방지하기 위한 엄격 모드입니다. JS 파일 첫번째 줄에 'use strict'
를 추가하면 됩니다.