var
- var(variable): 데이터 타입을 지정할 필요가 없는 변수 선언 방식
- 함수 범위로 사용되며, 함수 또는 프로그램(전역)이 실행되면 생성되고, 종료되면 소멸되는 방식
var globalVar = "hello"; // 전역 변수 function show(){ var localVar = "hi"; // 지역 변수 console.log(localVar); // hi console.log(globalVar); // hello } console.log(localVar); // error undefined console.log(globalVar); // hello
let, const
- var 사용의 문제점
- 같은 이름으로 재정의 또는 재선언이 가능하며, 마지막 값으로 받는다.
//변수 선언 var x = "hello"; // 재정의 x = "world"; // 재선언 var x = "hello world";
- 함수 스코프이기 때문에, 함수(전역) 내에 있는 동일한 변수는 재선언이 가능
var say = "hello"; if (true) { var say = "hi"; } console.log(say); // hi
- 변수 선언하기 전에 참조할 경우 undefined를 반환(Hoisting)
- Hoisting(호이스팅): 변수나 함수를 실행 이전(Runtime)에 미리 동작 시키거나 생성하는 것
console.log(say) // 호이스팅으로 인한 undefined 출력 var say = "hello"; console.log(say); // hello
- let: 가변 변수로 재정의할 수 있지만, 재선언이 불가능
- const: 불변 변수로 재정의하거나 재선언이 불가능
- let와 const의 특징: 블록(block) 단위 스코프
스코프
스코프: 변수가 접근할 수 있는 유효 범위
전역 스코프: 코드 모든 곳에서 변수를 참조할 수 있음
지역 스코프: 코드 특정 부분에서만 사용 가능한 변수
함수 스코프: 함수를 기준으로 범위가 구분
블록 스코프: 중괄호를 기준으로 범위가 구분
스코프 규칙: 바깥쪽 스코프에서 안쪽 스코프로 접근할 수 있으나, 반대로는 불가능하며, 스코프는 중첩이 가능함
정적 스코프(렉시컬 스코프): 함수 선언 위치에 따라 상위 스코프가 결정, javascript의 특징
동적 스코프: 함수 호출 위치에 따라 상위 스코프가 결정
Ghost