JavaScript
[JavaScript] 변수 스코프(지역, 전역) & 상수
sodait
2021. 6. 5. 00:58
변수의 유효범위
scope: 범위, 영역
=> 변수에는 유효한 범위가 있어서 그 범위를 벗어나게 되면 오류가 발생
- 자바스크립트에서는 중괄호{ }로 감싼 코드를 블록문(Block Statement)이라고 함
- 블록문을 기준으로 변수 나뉨
☝ 지역 변수, 로컬 변수(Local Variable)
(블록문 안에 선언된 변수들) 블록문 내에서만 유효한 범위를 가지고 있다.
// 함수 선언
function myFunction() {
let x = 3; // 지역 변수, 로컬 변수
console.log(x); // 3
}
myFunction(); // 함수 호출
console.log(x); // 오류 발생
✌ 전역 변수, 글로벌 변수(Global Variable)
(블록문 밖에서 선언한 변수) 블록문 안에서도 밖에서도 어디에서나 유효한 범위를 가지고 있다.
let x = 3; // 전역 변수, 글로벌 변수
function myFunction() {
console.log(x); // 3
}
myFunction();
console.log(x); // 둘다 3 출력
❔전역 변수와 똑같은 이름의 로컬 변수를 선언할 경우
let x = 3; // 전역 변수
function myFunction() {
let x = 5; // 지역 변수
console.log(x); // 5
}
myFunction();
console.log(x); // 3
블록문 내에서 변수를 사용하게 되면,
1) 먼저 로컬 변수가 있는지 찾아서 사용
2) 없을 경우 글로벌 변수를 찾아 사용
3)글로벌 변수도 없다면 오류 발생
🗿상수(Constant)
변하지 않고 항상 일정한 값을 유지
- 상수 선언 시, const로 선언
- 재선언, 재할당하려고 하면 오류 발생 -> 상수의 값을 보호할 수 있음
- 값을 변경할 수 없기 때문에 선언 시 값을 할당하지 않아도 오류 발생
- 상수 이름 지을 때, 대문자와 밑줄로 작성해주는 규칙이 있음
ex) MY_NUMBER (상수와 변수를 구분하기 위함)
(선언할 때는 const라는 키워드로 변수와 상수를 구분할 수 있지만, 실제로 상수를 사용할 때는 키워드 없이 상수 이름으로만 사용되기 때문에 변수와 상수를 구분하기 위한 이름 규칙이 필요)
❓상수를 사용해야 하는 이유
그냥 변수를 선언하고 값을 변경하지 않으면 된다고 생각될 수도 있지만,
1) 코드 작성하면서 실수로 나중에 다른 값을 할당할 수도 있고
2) 협업 시 다른 사람이 바꿔버리는 상황이 생길 수도 있으므로 상수를 활용하는 것이 코드를 더 안정적으로 만들어줌
Tip.
선언만 하고 값을 할당해 주지 않은 변수는 undefined 값을 가지고 있음 ->
redius(반지름)가 처음에는 빈 값이라는 것을 명시적으로 표현하고 싶을 때 null 값을 할당하는 것이 좋음
✋ 변수에 들어갈 자료형이 아직 결정되지 않았거나 일정하지 않을 경우, null 값을 할당하는게 좋지만
빈 값을 표현하면서 변수에 들어갈 값의 자료형도 간접적으로 표현하고 싶을 때는
문자열인 경우 => 빈 문자열 ' ', 숫자인 경우 => 0을 할당하는 방법도 있음