위 특징들에 대해서 자세히 알아보기 전에 ES5 특징 2가지를 리뷰
ES5 특징 - 변수의 Scope
var sum = 0;
for (var i = 1; i <= 5; i++) {
sum = sum + i;
}
console.log(sum); // 15
console.log(i); // 6
ES5 특징 - Hoisting
function willBeOveridden() {
return 10;
}
willBeOveridden(); // 5
function willBeOveridden() {
return 5;
}
let sum = 0
for (let i = 1; i <= 5; i++) {
sum = sum + i;
}
console.log(sum); // 10
console.log(i); // uncaught ReferenceError: i is not defined
const a = 10;
a = 20; //Uncaught TypeError: Assignment to constant variable
하지만 객체나 배열의 내부는 변경할 수 있다.
const a = {};
a.num = 10;
console.log(a); // {num: 10}
const a = [];
a.push(20);
console.log(a); // [20]
function f() {
{
let x;
{
//새로운 블럭안에 새로운 x의 스코프가 생김
const x = "sneaky";
x = "foo"; // 위에 이미 const로 x를 선언했으므로 다시 값을 대입하면 에러 발생
}
// 이번 블록 범위로 돌아왔기 때문에 'let x'에 해당하는 메모리에 값을 대입
x = "bar";
let x = "inner"; //Uncaught SyntaxError: Identifier 'x' has already been declared
}
}