변수(variable)는 데이터를 저장할 때 쓰이는 ‘이름이 붙은 저장소’이다.
let user = 'Dongchan', age = 25, message = 'I am CEO, bitch!';
상수는 재할당할 수 없으므로 상수를 변경하려고 하면 에러가 발생.
인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미
스코프는 참조 대상 identifier를 찾아내기 위한 규칙이다.
identifier는 어디에서 선언됐는지에 의해 자신이 유효한 범위를 갖는다.
자바스크립트는 함수 레벨 스코프(function-level scope)를 따른다. 함수 레벨 스코프란 함수 코드 블록 내에서 선언된 변수는 함수 코드 블록 내에서만 유효하고 함수 외부에서는 유효하지 않다는 것이다.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
var x = 10; // 전역 변수
function foo () {
// 선언하지 않은 변수
y = 20;
console.log(x + y);
}
foo(); // 30
console.log(window.x); // 10
console.log(window.y); // 20
delete x; // 전역 변수는 삭제되지 않는다.
delete y; // 프로퍼티는 삭제된다.
console.log(window.x); // 10
console.log(window.y); // undefined