용어/js
[국비][JS_용어/JAVA] 메모리 내 변수 선언과 지역변수/전역변수
줌인.
2024. 5. 21. 20:57
[변수 선언시 메모리에서 생기는 현상]
<script>
let flag = "hello";
</script>
let | 메모리 공간을 확보해달라는 의미, 변수 선언을 위한 선언문 |
flag(변수) | "hello", 즉 변수에 담긴 값을 보유한 곳, 변수의 주소 공간 |
[변수 이중 선언이 불가한 이유]
상기 그림처럼 flag가 두 군데 있으면, 왼쪽 flag 주소에 접근해야 할지 아니면 오른쪽 flag 주소에 접근해야 할지 모호함 (무엇을 지칭하는지 알 수 없음) |
[지역변수 / 전역변수 선언시 메모리에서 생기는 현상]
전역변수 | 지역변수 |
- 프로그램이 시작될 때 생성, 프로그램이 종료될 때 소멸 | - 변수 선언 블록이 실행될 때 생성되고, 블록이 종료되면 소멸 |
[지역변수 / 전역변수 차이]
<script>
let talk = "hello1"; //전역 변수 -> 메모리 공간에 계속 살아있는 값
for (let i=0;i<5;i++) { //i는 지역변수 -> 해당 지역에서만 사용된다.
console.log("현재 숫자는 ? : " + i)
}
//console.log("지역변수 : " + i); --> for 구문(지역)에서 벗어나서 사용이 불가피하다.
//지역 변수는 중괄호가 실행되어야 만들어짐(영역 내)
if (talk == "hello") {
let kor = "안녕하세요?";
console.log("한국어 : " + kor);
} else {
let eng = "hi";
console.log("영어 : " + eng);
}
</script>
전역변수 | 지역변수 |
- 프로그램의 모든 범위에서 접근할 수 있는 변수 - 일반적으로 함수나 클래스 밖에서 선언 - 프로그램이 시작될 때 생성, 프로그램이 종료될 때 소멸 |
- 특정 블록, 함수 또는 메소드 내에서 선언된 변수로, 해당 블록이나 함수/반복문 내에서만 유효 - 변수가 선언된 블록 내에서만 접근 가능 - 변수 선언 블록이 실행될 때 생성되고, 블록이 종료되면 소멸 |
∴ 프로그램 전반에서 공유되는 데이터를 저장할 때 사용 | ∴ 함수나 블록 내에서만 필요한 데이터를 저장할 때 사용 |
>> 지역변수와 전역변수가 동일한 이름을 가질 경우, 지역변수가 우선 함수 내에서는 동일한 이름의 전역변수가 존재하더라도 지역변수가 사용 |
[추가로 전역변수 / 지역변수 이해하기_예시]
<script>
let kor = "안녕하세요";
for (let i=0;i<5;i++) {
console.log("현재 숫자는 ? : " + i)
console.log("전역 변수 : " + kor);
}
if (kor == "안녕하세요") {
console.log("한국어입니다 : " + kor);
let eng = "hello";
console.log("별개로 또 다른 인사말은 영어입니다 : " + eng)
} else {
let eng = "hello"
console.log("영어입니다 : " + eng); //지역 변수 선언
//if {} 영역과 별개인 else {}영역 이므로 중복 선언이 가능 : 서로 다른 범위
console.log("별개로 또 다른 인사말은 한국어입니다 : " + kor);
}
let eng = "안녕하세요?"; //전역 변수 선언 -> 지역변수에서 이미 선언했지만 중복 선언이 아님
console.log(eng + ": 영어로 인사했습니다.");
//이렇게 중복 선언이 가능하나 프로그램은 모호하게 중복된 언어를 사용하지 않도록 해야함
</script>
※ url 같은 정보는 내부 캐시에서 계속해서 제공
⇒ 종종 오류 발생 가능성 높음, 이에 따라 종종 캐시 지우기를 통해 새로고침하는 것이 유용
728x90