Block: 중괄호로 시작하고, 끝나는 단위

여기서 질문
Q. 콘솔에 출력되는 결과는?
for (let i = 0; i < 5; i++) {
console.log(i); // 여기는 어디까지 찍힐까?
}
console.log("Final i: ", i); // 여기는 어디가 나올까?
정답은 직접 확인해보자!!
ReferenceError가 나올텐데, 그 이유는 block범위를 벗어나게 되면 변수를 사용할 수 없다.
그렇다면 여기서 질문
Q. 콘솔에 출력되는 결과는?
for (var i = 0; i < 5; i++) {
console.log(i); // 여기는 어디까지 찍힐까?
}
console.log("Final i: ", i); // 여기는 어디가 나올까?
정답은 직접 확인해보자!!
왜냐면 하나의 Function Scope 내에서는 사용이 가능하기 때문에 Reference Error를 내지 않는다.
function greetSomeone(firstName) {
var time = 'night';
if (time === 'night') {
var greeting = 'Good Night';
}
return greeting + ' ' + firstName;
}
greetSomeone('Steve');
function greetSomeone(firstName) {
let time = 'night';
if (time === 'night') {
let greeting = 'Good Night';
}
return greeting + ' ' + firstName;
}
greetSomeone('Steve');




let이 var보다 좋은 이유 중 하나는, 재선언을 방지해주기 때문이다.
scope는 변수 접근 규칙이다.
변수를 접근할 수 없을 때 나는 에러는 ReferenceError이다.
var로 정의된 전역변수는 window 객체에 담긴다.
변수 선언을 하지 않으면 어떤 scope든 전역변수가 되므로 위험하다.