min
변수의 생명주기 (variable life cycle) 본문
1. 변수의 생명주기의 정의
: 변수의 생명주기의 의미는 해당 변수가 메모리에 얼마나 존재하고 있는지를 나타내는 것이다. 정확하게 말하면 변수가 메모리에 들어가는 순간부터 시작해 사라지는 순간까지를 의미한다.
2. 지역 변수의 생명주기
: 지역 변수의 생명주기는 해당 지역변수를 담고 있는 함수의 생명주기와 동일시 된다. 실행 컨텍스트에서 variable environment와 lexical environment 정확히는 레코드에 식별자에 대한 정보가 들어간다. 그리고 이 식별자에 대한 정보는 실행 컨텍스트가 실행 컨텍스트 스택에서 없어질 때까지 메모리에 잔류하고 있다.
3. 전역 변수의 생명주기
: 전역 변수의 생명주기는 해당 전역변수를 담고 있는 전역 컨텍스트의 생명주기와 동일시 된다. 이 때 전역 컨텍스트란 다른 실행 컨텍스트가 생기기 이전에 실행컨텍스트 스택에 존재하고 있는 컨텍스트로 잔류하고 있는 시간이 지역 변수를 담고 있는 실행 컨텍스트에 비해서 많을 수 밖에 없다. 그렇기에 전역 변수를 설정할 때는 조심해야한다. 그 이유는 의도치 않게 전역 변수가 메모리를 계속 잡아먹고 있게 된다면 이로 인해서 불 필요한 메모리를 가질 수 있기 때문이다.
4. 전역 변수의 위험성에 대한 대첵
: 전역 변수는 앞서 설명했던 것와 같이 생명주기가 지역 변수에 비해서 높은 편이기 때문에 사용할 때 조심해야 한다. 그래서 우리는 이 위험성을 방지하기 위해서 전역 변수를 지역 변수로 바꿀 필요가 있다. 예를 들어 다음과 같은 코드가 있다고 하자.
//수정 전...
let a = 3;
function test1() {
console.log(a)
}
function test2() {
console.log(a)
}
// 수정 후...
function outer() {
let a = 3;
function test1() {
console.log(a)
}
function test2() {
console.log(a)
}
}
outer()
이런 방식 말고도 각각의 상황에 맞춰서 불 필요한 메모리를 잡을 수 있다.
'자바스크립트' 카테고리의 다른 글
스코프(scope) (0) | 2023.12.14 |
---|---|
Execution Context (+ hoisting , scope) (0) | 2023.12.12 |
async / await와 promise의 차이에 대하여... (0) | 2023.08.19 |
var let const의 차이점에 대하여... (0) | 2023.08.18 |
호이스팅에 대하여... (0) | 2023.08.14 |