► Q1: greetSomeone() 과 firstName 실행 결과는?
let greeting = 'Hello';
function greetSomeone() {
let firstName = 'Josh';
return greeting + ' ' + firstName;
}
greetSomeone(); // hello Josh;
firstName; // firstName is not defined (ReferenceError)
► 변수 firstName에 접근할 수 있는 범위가 존재합니다.
Local Scope 안쪽에서 선언된 변수는 밖에서 사용할 수 없습니다.
let greeting = 'Hello'; //이 구간부터 Global Scope
function greetSomeone() { // 이 구간부터 } 까지 local Scope
let firstName = 'Josh';
return greeting + ' ' + firstName;
}
► Scope : 변수 접근 규칙에 따른 유효 범위
► Rule 1 : Local Scope vs Global Scope
let greeting = 'Hello'; //이 구간부터 Global Scope
function greetSomeone() { // 이 구간부터 } 까지 local Scope
let firstName = 'Josh';
return greeting + ' ' + firstName;
}
► 문제 1
let name = "Richard";
function showName() {
let name = "Jack"; // 지역 변수
// showName 함수 안에서만 접근 가능
console.log(name); // ???
}
console.log(name); // ???
showName();
console.log(name); // ???
위 코드에서 순서대로 콘솔에 출력되는 결과는?
1. Richard / Jack / Jack
2. Richard / Jack / Richard
3. Jack / Richard / Richard
4. Jack / Jack / Jack
정답 ) 2번
► 문제 2
let name = "Richard";
function showName() {
name = "Jack"; // 전역 변수
// 선언(let)이 없기 때문에, 바깥 scope에 있는 name이라는 변수를 가져옵니다
console.log(name); // ???
}
console.log(name); // ???
showName();
console.log(name); // ???
위 코드에서 순서대로 콘솔에 출력되는 결과는?
1번 Richard / Jack / Jack
2번 Richard / Jack / Richard
3번 Jack / Richard / Richard
4번 Jack / Jack / Jack
정답) 1번
► Rule 2 : Function Scope vs Block Scope
► 문제 1
콘솔에 출력되는 결과는?
for (let i = 0; i < 5; i++) {
console.log(i); // 다섯번 iteration
}
console.log(`final i: ${i}`);
정답 ) // Uncaught ReferenceError: i is not defined
// Block 범위를 벗어난 즉시 변수를 사용할 수 없기 때문입니다.