변수선언
var
console.log(title); // undefined
var title;
변수를 만들기도 전에 title 을 실행했는데도, 에러가 발생하는 것이 아닌 undefined 값이 출력됨.
선언이 나중에 되었으나, 선언부분이 올라가 있는 것 같은 현상을 호이스팅(Hoisting) 이라고 한다.
console.log(title); // undefined
var title = 'codeit';
console.log(title); // 'codeit'
선언 부분만 올라가기 때문에 해당 되는 값 자체는 그 이후에 접근이 가능하다.
let
console.log(title); // ReferenceError
let title;
let 은 변수선언 이전에 접근할 수 없어서 에러가 난다.
중복선언
var
var title = 'Codeit';
console.log(title); // 'Codeit'
var title = 'JavaScript';
console.log(title); // 'JavaScript'
title 변수를 두번 선언해도, 중복선언이 가능하다.
let
let title = 'Codeit';
console.log(title);
let title = 'JavaScript'; // SyntaxError
console.log(title);
중복선언이 불가능하다.
스코프 (전역변수, 지역변수)
var x = 3; // Global Variable
function myFunc() {
var y = 4; // Local Variable
console.log(`x in myFunc: ${x}`); // `x in myFunc: 3`
console.log(`y in myFunc: ${y}`); // `y in myFunc: 4`
}
myFunc();
console.log(x); // 3
console.log(y); // Error
전역변수인 x 는 함수 안에서나 밖에서도 실행이 되지만, 지역변수는 y는 밖에서는 실행되지 않는다.
var
var x = 3;
if (x < 4) {
var y = 3;
}
for (var i = 0; i < 5; i++) {
console.log(i);
}
console.log('x:', x);
console.log('y:', y);
console.log('i:', i);
그러나 var 키워드는 함수 단위로만 구분되기 때문에, 모두 전역변수로 평가된다. 따라서 어떤 조건문, 반복문에서 사용하는 전역변수는 만들수가 없다.
let
let x = 3;
if (x < 4) {
let y = 3;
}
for (let i = 0; i < 5; i++) {
console.log(i);
}
console.log('x:', x);
console.log('y:', y); // Error
console.log('i:', i);
if문 안에서 선언된 y는 if 문 밖에서 사용할 수 없음.
var x; // 함수 스코프 (function scope)
var y; // 블록 스코프 (block scope)
const z; // 블록 스코프 (block scope)
'JavaScript > Modern JavaScript' 카테고리의 다른 글
[JavaScript] 조건 연산자/ 삼항 연산자 (0) | 2023.05.18 |
---|---|
[JavaScript] this 객체 (0) | 2023.05.18 |
[JavaScript] 데이터타입 Symbol 과 bigInt (0) | 2023.05.02 |
[JavaScript] 배열 메소드 forEach 와 map (0) | 2023.04.11 |
[JavaScript] sort/ reverse 메소드 (0) | 2023.03.26 |