let username = 'Kim Hosik';
if (username) {
let message = `Hello, ${username}!`;
console.log(message); // 1
}
console.log(message); // 2
Hello, Kim Hosik!
Uncaught ReferenceError: message is not defined at <anonymous>:8:13
let greeting = 'Hello';
function greetSomeone () {
let firstName = 'Hosik';
return greeting + ' ' + firstName;
}
console.log(greetSomeone()); // 1
console.log(firstName); // 2
Hello Hoisk
Uncaught ReferenceError: firstName is not defined at <anonymous>:8:13
let name = '김코딩'; // 전역 변수
function showName() {
let name = '김호식'; // 지역 변수
console.log(name); // 1
}
console.log(name); // 2
showName();
console.log(name); // 3
1번 : 김호식
: 함수 안에서 선언한 name 이라는 지역 변수에 접근
: 변수 이름이 전역 변수와 똑같지만, 지역 변수가 전역 변수보다 우선순위가 높으므로, 지역 변수 name 이 출력된다
: 동일한 변수 이름으로 인해 바깥쪽 변수가 안쪽 변수에 의해 가려지는 현상을 variable shadowing 이라고 한다.
2번 : 김코딩
: 1번 줄에서 전역 변수로 선언된 name을 가져온다.
: Scope 규칙에 의해 showName 함수 안쪽에 선언된 지역 변수 name 에는 접근 불가하다.
3번 : 김코딩
: 1번 줄에서 전역 변수로 선언된 name 을 가져온다.
: Scope 규칙에 의해 showName 함수 안쪽에 선언된 지역 변수 name 에는 접근 불가하다.
let name = '김코딩'; // 전역 변수
function showName() {
name = '김호식'; // 지역 변수
console.log(name); // 1
}
console.log(name); // 2
showName();
console.log(name); // 3
1번 : 김호식
: 함수 안에서 선언한 name 이라는 지역 변수에 접근
: 변수 이름이 전역 변수와 똑같지만, 지역 변수가 전역 변수보다 우선순위가 높으므로, 지역 변수 name 이 출력된다.
: 동일한 변수 이름으로 인해 바깥쪽 변수가 안쪽 변수에 의해 가려지는 현상을 variable shadowing 이라고 한다.
2번 : 김코딩
: 1번 줄에서 전역 변수로 선언된 name 을 가져온다.
: Scope 규칙에 의해 showName 함수 안쪽에 선언된 지역 변수 name 에는 접근 불가하다.
3번 : 김호식
: let 키워드를 사용한 선언이 존재하지 않으므로, '김호식'이라는 값으로 할당하고 있는 name 변수는 전역에 선언된 name 변수를 그대로 사용하겠다는 의미이다.
: showName 함수가 실행되기 전에는 '김코딩'을 출력하고, 그 이후에는 전역 변수 name 으로 값이 바뀌기 때문에 3번은 '김호식'을 출력
가장 바깥쪽의 Scope는 Global Scope(전역 스코프)라고 부른다.
전역이 아닌 다른 Scope 는 Local Scope(지역 스코프)라고 부른다.
Global Scope(전역 스코프)에서 선언한 변수는 전역 변수이다.
Local Scope(지역 스코프)에서 선언한 변수는 지역 변수이다.
변수 접근 규칙에 다른 유효 범위
: 중괄호를 기준으로 범위 구분
for (let i = 0; i < 5; i++) {
console.log(i) // 다섯 번 반복한다.
}
console.log('final i:', i); // 1
: 함수 선언식 및 함수 표현식으로 범위 구분
var | let | const | |
---|---|---|---|
유효 범위 | 함수 스코프 | 블록스코프 및 함수 스코프 | 블록스코프 및 함수 스코프 |
값 재할당 | 가능 | 가능 | 불가능 |
재선언 | 가능 | 불가능 | 불가능 |