{ }
로 변수의 범위가 제한되었음const a = 10;
a = 20 => ❌
let a = 10;
let a = 20; => ❌
a = 30; -> ⭕
{ }
에 상관없이 스코프가 설정됨var sum = 0;
for(var i=1; i<=5; i++) {
sum = sum + 1;
}
console.log(sum); //15
console.log(i); //6
❗ JAVA는 저 i
로 접근이 안됨!
function a()
와 var
는 코드의 최상단으로 끌어올려진 것(hoisted)처럼 보인다.function willBeOveridden() {
return 10;
}
willBeOveridden(); // 5
function willBeOveridden() {
return 5;
}
let sum = 0;
for(let i = 1; i <= 5; i++) {
sum = sum + 1;
}
console.log(sum); //10
console.log(i); //Uncaught ReferenceError: i is not defined
const a = 10;
a = 20; ❌
❗객체나 배열 재정의는 가능❗
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"; ❌
}
}
❗❗❗❗{ }
블록 마다 새로운 scope이 생긴다❗❗❗❗
methods : {
addOneItem : function(value) {
const obj = {completed : false, item : value }; //이 아이템이 check됐는지아닌지.
//객체를 String으로 변환하는 API
localStorage.setItem(value, JSON.stringify(obj));
this.todoItems.push(obj);
},
}
created: function() { //뷰의 라이프 사이클과 관련된 속성. 인스턴스가 생성되자마자 호출되는 라이프사이클 훅.
if(localStorage.length > 0) {
for(let i= 0; i<localStorage.length; i++) {
if(localStorage.key(i) !== 'loglevel:webpack-dev-server') {
this.todoItems.push(JSON.parse(localStorage.getItem(localStorage.key(i))));
}
}
}
},