κ°λΉμ§ 컬λ μ μ μλ°μ€ν¬λ¦½νΈλ₯Ό λΉλ‘―ν μ¬λ¬ νλ‘κ·Έλλ° μΈμ΄λ€μ΄ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ λ°©λ²μ λ» νλ€.
let user = { name: 'sunghoon', job: 'dev', } // { name: 'sunghoon', job: 'dev' } μΈ κ°μ²΄κ° // userλΌλ λ³μμ ν λΉλμ΄μ userλ₯Ό ν΅ν΄ μ κ·Ό κ°λ₯νκ² λ¨. user = null; // userμ nullμ΄ ν λΉλλ©΄μ { name: 'sunghoon', job: 'dev' } λΌλ κ°μ²΄λ λλ¬ λΆκ°λ₯νκ² λμκ³ //ν΄λΉ κ°μ κ°λΉμ§ 컬λ μ μ μν΄ μμ λ¨.
κ°λΉμ§ 컬λ μ μ΄ μλνλ κΈ°μ€μ λλ¬ κ°λ₯μ±(reachability)μ΄λ©° λλ¬ κ°λ₯ν κ°μ΄λ μ΄λ»κ²λ μ κ·Όκ°λ₯νκ±°λ μ¬μ© κ°λ₯ν κ°μ λ» νλ€.
μ μ λ³μμ κ°μ΄ μ΄λμλ μ§ λλ¬κ°λ₯νκΈ°μ νΉλ³ν μ΄μ κ° μλ€λ©΄ μμ λΆκ°λ₯ν κ²λ€μ νΉλ³ν μ΄μ κ° μμΌλ©΄ μμ λμ§ μλλ€.
μ¬λ¬ μκ³ λ¦¬μ¦μ΄ μμ§λ§ κ°μ₯ κΈ°λ³Έμ μΈ μκ³ λ¦¬μ¦μ mark and sweep λ°©μμ΄λΌκ³ λΆλ¦¬λ μκ³ λ¦¬μ¦μ΄λ€.
mark and sweep λ°©μμ μ μ λ³μμ κ°μ 루νΈμ 보μ νμ(mark)λ₯Ό λ¨κΈ°κ³ , κ·Έ λ€μμΌλ‘ 루νΈκ° μ°Έμ‘°νλ κ°μ²΄κΉμ§ λ°©λ¬Έν΄ μ λΆ νμμ λ¨κΈ΄λ€.
루νΈμμ λλ¬ν μ μλ λͺ¨λ κ°μ²΄μ λ°©λ¬Έν λκΉμ§ ν΄λΉ κ³Όμ μ λ°λ³΅νλ€κ° λ μ΄μ λλ¬ κ°λ₯ν κ°μ²΄κ° μμλ νμμ΄ μλ λ°μ΄ν°λ₯Ό λͺ¨λ μμ νλ€.
new μ°μ°μμ μμ±μ ν¨μλ μ μ¬ν κ°μ²΄λ₯Ό μ¬λ¬κ° λ§λ€μ΄μΌ ν λ μ¬μ©νλ€.
μμ±μ ν¨μμ κ²½μ° μΌλ° ν¨μμ κΈ°μ μ μ°¨μ΄λ μμΌλ μμ±μ ν¨μμ κ²½μ° λ κ΄λ‘λ₯Ό λ°λ₯Έλ€.
function AddUser(name, job){
this.name = name;
this.job = job;
}
const user1 = new AddUser('sunghoon', 'dev');
console.log(user1) // { name: 'sunghoon', job: 'dev' }
new μ°μ°μμ μμ±μ ν¨μλ₯Ό μ΄μ©ν λ λ€μκ³Ό κ°μ μκ³ λ¦¬μ¦μ΄ μλνλ€.
μμ±μ ν¨μλ κ°μ²΄ thisμ νλ‘νΌν°λ₯Ό μΆκ° ν μλμΌλ‘ κ°μ²΄ thisλ₯Ό λ°ννκΈ°μ returnμ΄ νμμλ€.
νμ μμ§λ§ λ§μ½ μμ±μ ν¨μ λ΄ returnλ¬Έμ΄ μμ±λλ€λ©΄, λ°νλλ κ²μ΄ κ°μ²΄μΌ κ²½μ° ν΄λΉ κ°μ²΄λ₯Ό λ°ννκ³ , λ§μ½ μμ μλ£νμ΄ λ°νλλ€λ©΄ returnλ¬Έμ 무μνλ€.
곡λΆλμ΄ λ§μ§λ μμ§λ§ κ·Έλλ μμΉ¨μ μΌμ΄λ¬μ λλ³΄λ€ μ§μμ΄ λμλ€.
λ무 λμμ 곡λΆλ μμ²΄κ° μ λ€γ
μ΄μ λ°€μ μλ©΄μ λλΌλ§λ₯Ό λͺλ² λ³΄κ³ μ€λλ μ€λ λ¦μ λ μλ²λ Έκ³ , μΌμ΄λμλ μΉ¨λμ λΉλ₯거리λ€κ° λ·νλ¦μ€λ₯Ό μΌλ²λ Έλ€.
μκΈ°λ°μ±μ μκ°μ΄ νμν μμ μΈ λ― νλ€.
λͺ¨λ μλ°μ€ν¬λ¦½νΈ - https://ko.javascript.info/