μ΄λ²€νΈ 루νλ 무μμΈκ°?
2023 / 12 / 22 (κΈ)
μ΄λ²€νΈ 루ν
λ μλ°μ€ν¬λ¦½νΈ λ°νμ μΈλΆμμ μλ°μ€ν¬λ¦½νΈμ λΉλκΈ° μ€νμ λκΈ° μν΄ λ§λ€μ΄μ§ μ₯μΉλΌκ³ νλ€.
νΈμΆ μ€ν(call stack)μ μλ°μ€ν¬λ¦½νΈμμ μνν΄μΌ ν μ½λλ ν¨μλ₯Ό μμ°¨μ μΌλ‘ λ΄μλλ μ€νμ΄λΌκ³ νλ€.
<script>
function bar() {
console.log('bar')
}
function baz() {
console.log('baz')
}
function foo() {
console.log('foo')
bar()
baz()
}
foo()
</script>
μ μ½λλ fooλ₯Ό νΈμΆνκ³ , λ΄λΆμμ bar,bazλ₯Ό μμ°¨μ μΌλ‘ νΈμΆνλ κ΅¬μ‘°λ‘ λΌ μλ€.
μ΄ μ½λλ€μ λλ΅ λ€μκ³Ό κ°μ μμλ‘ νΈμΆ μ€νμ μμ΄κ³ λΉμμ§κ² λλ€.
1οΈβ£ foo()κ° νΈμΆ μ€νμ λ¨Όμ λ€μ΄κ°
2οΈβ£ foo() λ΄λΆμμ console.logκ° μ‘΄μ¬νλ―λ‘ νΈμΆ μ€νμ λ€μ΄κ°
3οΈβ£ 2λ² μ€νμ΄ μλ£λλ©΄ λ€μ μ½λλ‘ λμ΄κ°(μμ§ foo()λ μ‘΄μ¬ν¨)
4οΈβ£ bar()κ° νΈμΆμ€νμ λ€μ΄κ°
5οΈβ£ bar()λ΄λΆμ console.logκ° μ‘΄μ¬νλ―λ‘ νΈμΆ μ€νμ λ€μ΄κ°
6οΈβ£ 5λ² μ€νμ΄ μλ£λλ©΄ λ€μ μ½λλ‘ λμ΄κ°(μμ§ foo() , bar() μ‘΄μ¬ν¨)
7οΈβ£ λ μ΄μbar()μ λ¨μ κ²μ΄ μμΌλ―λ‘ νΈμΆ μ€νμμ μ κ±°λ(μμ§ foo()λ μ‘΄μ¬)
8οΈβ£ baz()κ° νΈμΆ μ€νμ λ€μ΄κ°
9οΈβ£ baz() λ΄λΆμ console.logκ° μ‘΄μ¬νλ―λ‘ νΈμΆ μ€νμ λ€μ΄κ°
π 9λ²μ΄ μ€ν μλ£λλ©΄ λ€μμ½λλ‘ λμ΄κ°(μμ§ foo() , baz() μ‘΄μ¬ν¨)
1οΈβ£1οΈβ£ λμ΄μ baz()μ λ¨μ κ²μ΄ μμΌλ―λ‘ νΈμΆ μ€νμμ μ κ±°λ(μμ§ foo()λ μ‘΄μ¬)
1οΈβ£2οΈβ£ λμ΄μ foo()μ λ¨μ κ²μ΄ μμΌλ―λ‘ νΈμΆ μ€νμμ μ κ±°λ
1οΈβ£3οΈβ£ λμ΄μ νΈμΆ μ€νμ μ‘΄μ¬νλκ² μμ
νΈμΆ μ€νμ΄ λΉμ΄ μλμ§ μ¬λΆλ₯Ό νμΈ νλ κ²μ΄ λ°λ‘ μ΄λ²€νΈ 루νλΌκ³ νλ€.
μ΄λ²€νΈ 루νλ λ¨μν μ΄λ²€νΈ 루νλ§μ λ¨μΌ μ€λ λ λ΄λΆμμ μ΄ νΈμΆ μ½ν λ΄λΆμ μνν΄μΌ ν μμ
μ΄ μλμ§ νμΈνκ³ , μνν΄μΌ ν μ½λκ° μλ€λ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄μ©ν΄ μ€ννλ€. μ½λλ₯Ό μ€ννλ κ²κ³Ό νΈμΆ μ€νμ΄ λΉμ΄μλμ§ νμΈνλ κ² λͺ¨λκ° λ¨μΌ μ€λ λμμ μΌμ΄λλ€κ³ νλ€. μ¦, λ μμ
μ λμμ μΌμ΄λ μ μμΌλ©° μ€λ λμμ μμ°¨μ μΌλ‘ μ€νλλ€κ³ νλ€.
κ·Έλ λ€λ©΄ λΉλκΈ° μμ μ μ΄λ»κ² μ€νλλ κ²μΌκΉ?
<script>
function bar() {
console.log('bar')
}
function baz() {
console.log('baz')
}
function foo() {
console.log('foo')
setTimeout(bar(),0) // setTimeoutλ§ μΆκ°νλ€.
baz()
}
foo()
</script>
μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±ν΄ λ³Έ κ°λ°μλΌλ©΄ μμ μμ μ λ€λ₯΄κ² setTimeoutμΌλ‘ μΈν΄ foo ,baz, barμμΌλ‘ μΆλ ₯λλ κ²μ μκ³ μμκ²μ΄λ€.
μ€μ λ‘ νΈμΆ μ€ν λ΄λΆμμλ λ€μκ³Ό κ°μ μΌμ΄ λ°μνλ€.
1οΈβ£ foo()κ° νΈμΆ μ€νμ λ¨Όμ λ€μ΄κ°
2οΈβ£ foo() λ΄λΆμμ console.logκ° μ‘΄μ¬νλ―λ‘ νΈμΆ μ€νμ λ€μ΄κ°
3οΈβ£ 2λ² μ€νμ΄ μλ£λλ©΄ λ€μ μ½λλ‘ λμ΄κ°(μμ§ foo()λ μ‘΄μ¬ν¨)
4οΈβ£ setTimeout(bar(),0)κ° νΈμΆμ€νμ λ€μ΄κ°
5οΈβ£ 4λ²μ λν΄ νμ΄λ¨Έ μ΄λ²€νΈκ° μ€ν λλ©° νμ€ν¬ νλ‘ λ€μ΄κ°κ³ ,κ·Έ λμ λ°λ‘ μ€νμμ μ κ±°λλ€.
6οΈβ£ baz()κ° νΈμΆ μ€νμ λ€μ΄κ°
7οΈβ£ baz() λ΄λΆμ console.logκ° μ‘΄μ¬νλ―λ‘ νΈμΆ μ€νμ λ€μ΄κ°
8οΈβ£ 7λ² μ€νμ΄ μλ£λλ©΄ λ€μ μ½λλ‘ λμ΄κ°(μμ§ foo(),baz()λ μ‘΄μ¬ν¨)
9οΈβ£ λμμ baz()μ λ¨μ κ²μ΄ μμΌλ―λ‘ νΈμΆ μ€νμμ μ κ±°(μμ§ foo()λ μ‘΄μ¬ν¨)
π λ μ΄μ foo()μ λ¨μ κ²μ΄ μμΌλ―λ‘ νΈμΆ μ€νμμ μ κ±°ν¨
1οΈβ£1οΈβ£ λμ΄μ νΈμΆ μ€νμ μ‘΄μ¬νλκ² μμ
1οΈβ£2οΈβ£ μ΄λ²€νΈ 루νκ° νΈμΆ μ€νμ΄ λΉμμ Έ μλ€λ κ²μ νμΈνκ³ μ΄νμ νμ€ν¬ νλ₯Ό νμΈνλ 4λ²μ λ€μ΄κ°λ λ΄μ©μ΄ μμ΄ bar()λ₯Ό νΈμΆ μ€νμ λ£μ
1οΈβ£3οΈβ£bar() λ΄λΆμ console.logκ° μ‘΄μ¬νλ―λ‘ νΈμΆ μ€νμ λ€μ΄κ°
1οΈβ£4οΈβ£ 13λ² μ€νμ΄ λλλ©΄ λ€μ μ½λλ‘ λμ΄κ° (μμ§ bar()μ‘΄μ¬)
1οΈβ£5οΈβ£ λμ΄μ bar()μ λ¨μ κ²μ΄ μμΌλ―λ‘ νΈμΆ μ€νμμ μ κ±°ν¨
μ μ½λλ₯Ό 보면 ,setTimeot(()=>{},0)μ΄ μ ννκ² 0μ΄ λ€μ μ€νλλ€λ κ²μ 보μ₯νμ§ λͺ»νλ€λ κ²μ μ΄ν΄νκ² λ κ²μ΄λ€.
μ¬κΈ°μλΆν°λ νμ€ν¬ ν
λΌλ μλ‘μ΄ κ°λ
μ΄ λ±μ₯νλ€.
νμ€ν¬ νλ μ€νν΄μΌ ν νμ€ν¬μ μ§ν©μ μλ―Ένλ€.
μ΄λ²€νΈ 루νλ μ΄λ¬ν νμ€ν¬ νλ₯Ό ν κ° μ΄μ κ°μ§κ³ μλ€.
κ·Έλ¦¬κ³ μ΄λ¦κ³Όλ λ€λ₯΄κ² νμ€ν¬ νλ μλ£ κ΅¬μ‘°μ νκ° μλλΌ set ννλ₯Ό μ§λκ³ μλ€.
κ·Έ μ΄μ λ μ νλ ν μ€μμ μ€ν κ°λ₯ν κ°μ₯ μ€λλ νμ€ν¬ νλ₯Ό κ°μ ΈμμΌ νκΈ° λλ¬Έμ΄λ€. μλ£κ΅¬μ‘°μΈ νλ 무쑰건 μμ μλ κ²μ FIFOνμμΌλ‘ κΊΌλ΄μμΌ νμ§λ§ νμ€ν¬ νλ κ·Έλ μ§ μλ€. νμ€ν¬ νμμ μλ―Ένλ μ€νν΄μΌ ν νμ€ν¬ λΌλ κ²μ λΉλκΈ° ν¨μμ μ½λ°± ν¨μλ μ΄λ²€νΈ νΈλ€λ¬ λ±μ μλ―Ένλ€.
μ¦, μ΄λ²€νΈ 루νμ μν μ νΈμΆ μ€νμ μ€ν μ€μΈ μ½λκ° μλμ§
νμ€ν¬ νμ λκΈ°μ€μΈ ν¨μκ° μλμ§ λ°λ³΅ν΄μ νμΈνλ μν μ νλ€κ³ νλ€.
νΈμΆ μ€νμ΄ λΉμλ€λ©΄ νμ€ν¬ νμμ λκΈ° μ€μΈ μμ
μ΄ μλμ§ νμΈνκ³
μμ
μ μ€ν κ°λ₯ν μ€λλ κ²λΆν° μμ°¨μ μΌλ‘ κΊΌλ΄μμ μ€ννκ² λλ€κ³ νλ€.
μ΄ μμ
λν λ§μ°¬κ°μ§λ‘ νμ€ν¬ νκ° λΉμ΄μμ λ κΉμ§ μ΄λ£¨μ΄μ§λ€κ³ νλ€.
κ·Έλ λ€λ©΄ λΉλκΈ° ν¨μλ λκ° μννλλμ΄λ€.
nμ΄λ€μ setTimeoutμ μμ²νλλ μμ
μ λκ° μ²λ¦¬νλ κ²μΌκΉ?
fetchλ₯Ό κΈ°λ°μΌλ‘ μ€νλλ λ€νΈ μν¬ μμ²μ λκ° λ³΄λ΄κ³ μλ΅μ λ°μ κ²μΈκ°?
μ΄λ¬ν μμ
λ€μ λͺ¨λ νμ€ν¬ νκ° ν λΉλλ λ³λμ μ€λ λ
μμ μνλλ€κ³ νλ€.
μλ°μ€ν¬λ¦½νΈ μ½λ μ€νμ μ±κΈ μ€λ λ λ΄λΆμμ μ΄λ£¨μ΄μ§μ§λ§ μΈλΆ Web APIλ±μ λͺ¨λ μλ°μ€ν¬λ¦½νΈ μ½λ μΈλΆμμ μ€νλκ³ μ½λ°±μ΄ νμ€ν¬ νλ‘ λ€μ΄κ°λ κ²μ΄λΌκ³ νλ€.
μ΄λ²€νΈ 루νλ νΈμΆ μ€νμ΄ λΉκ³ , μ½λ°±μ΄ μ€ν κ°λ₯ν λκ° μ€λ©΄ μ΄κ²μ κΊΌλ΄μ μννλ μν μ νλ€κ³ νλ€.
κ·Έλ λ€λ©΄ λΉλκΈ° μμ μ μννλ νμ€ν¬ νλ κ³Όμ° μ΄λ€ κ΅¬μ‘°λ‘ μλνλκ²μΌκΉ?
β‘οΈ λ€μ κΈμμλ νμ€ν¬ νμ λ§μ΄ν¬λ‘ νμ€ν¬ νμ λν΄ μ΄ν΄λ³΄μ.