C언어같은 저수준 언어에서는 명시적으로 제거할 수 있지만 Javasript같은 고수준 언어에서는 가비지컬렉터의 의해 자동으로 제거됩니다.
const num = 1994; // number
const str = 'hyoseong'; // string
const o = {
num: 2022,
nothting: null
}; // object
const a = [1994, null, 'hyoseong']; // array(object)
function func(param) { // function
return param + 2;
}
someElement.addEventListener('click', function(){ // EventListener
someElement.style.backgroundColor = 'black';
}, false);
const date = new Date(); // Date Object
const element = document.createElement('div'); // DOM Element
const hyoseong = 'hyoseong';
const hyo = s.substr(0, 3);
// 자바스크립트에서 문자열은 immutable 값이기 때문에,
// 메모리를 새로 할당하지 않고 [0, 3] 이라는 범위만 저장합니다.
// hyoseong 변수를 수정한다고 hyo 변수가 변하지는 않습니다.
값을 읽거나 쓸때 사용됩니다.
const introduce = (name, age) => {
console.log(`my name is ${name} and age ${age}`);
};
const name = 'hyoseong';
const age = 29;
introduce(name, age); // parameter로 사용
const job = 'developer';
console.log(`my job is ${job}`); // 읽기
jaavscript는 사용하지 않는 값들을 가비지컬렉터가 자동으로 삭제해줍니다.
let m1 = 'none1'; // allocation
let m2 = 'none2'; // allocation
let m3 = 'none3'; // allocation
console.log(m1, m2, m3); // uesd
m1 = m2;
m2 = m3;
m3 = null;
// none2, none3을 할당되었지만 none1은 할당되지 않습니다. 이렇게 사용되어지지 않는 값을 가비지컬렉션이 Mark and Sweep 알고리즘의 의해 삭제됩니다.
console.log(m1, m2, m3);
Mark and Sweep 알고리즘
https://velog.io/@skgyaos3/JavaScript-Memory#mark-and-sweep
https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management