About Javscript
κ°μ
λͺ¨λ μλ€μνΌ javascriptλ μΈν°νλ¦¬ν° μΈμ΄μ΄λ€. 1995λ μλ°μ€ν¬λ¦½νΈλ μ μ μμ μνΈμμ©μ μν΄ 10μΌλ§μ νμν μΈμ΄μ΄κ³ , "HTML νμ΄μ§λ₯Ό λμ μΌλ‘ λ§λλ κ²"μ λͺ©μ μ΄ μμ΄ κ°λ²Όμ΄ μΈν°νλ¦¬ν° μΈμ΄λ‘ λ§λ€μ΄μ‘λ€.
Compile μΈμ΄μ Interpreter μΈμ΄
μ»΄νμΌ μΈμ΄μ μΈν°νλ¦¬μ΄ μΈμ΄μ κ°μ₯ ν° μ°¨μ΄μ μ pre-processing, μ»΄νμΌ μ 무λ€.
μ»΄νμΌμ κ³ κΈμΈμ΄λ‘ μμ±λ μ½λλ₯Ό κΈ°κ³μ΄λ‘ λ³ννλ κ³Όμ μ λ§νλλ°, λΉμ°ν λ³νλ κΈ°κ³μ΄λ₯Ό μ€ννκΈ° λλ¬Έμ λΉ λ₯Ό μ λ°μ μλ€.
function sum () {
let result = 0
for (let i = 1 ; i <= 10 ; i++){
result += i;
}
return result;
}
sum() // for loop.. -> 55
sum() // for loop.. -> 55
sum() // for loop.. -> 55
β
// compile κ²°κ³Ό
sum() = 55
sum() = 55
sum() = 55μ»΄νμΌμ λ§μΉ κΈ°κ³μ΄λ μ€νλ§ νλ©΄ λμ§λ§, μΈν°νλ¦¬ν° μΈμ΄λ λ§€λ² sum ν¨μλ₯Ό μ€ννμ¬ loopλ₯Ό λκ² λλ€.
Javascript μνκ³ μμ μ λͺ ν μ»΄νμΌλ‘λ Babelκ³Ό Typescriptκ° μλ€.
Babelμ ES6λ± μ΅μ μλ°μ€ν¬λ¦½νΈ μ€νμ λͺ¨λ λΈλΌμ°μ μμ μ¬μ© κ°λ₯ν μ€ν¬λ¦½νΈλ‘ μ»΄νμΌνλ€.
Typescriptλ TSλ‘ μμ±λ μ½λλ₯Ό JSλ‘ λ³ννλ€.
κ·Έλ¦¬κ³ κ²°κ΅ Javascriptλ μ€νλκΈ° μν΄ μ»΄νμΌ κ³Όμ μ κ±°μΉλ€.
λ€λ§ μλ°μ€ν¬λ¦½νΈ μμ§ λ΄λΆμμ μ€ν μ€ μ»΄νμΌμ΄ νμν κ²½μ°μ λ΄λΆμμ μ»΄νμΌ νλ€.
Javascript Engine
μλ°μ€ν¬λ¦½νΈ μμ§μ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό ν΄μνκ³ μ€ννλ μΈν°ν리ν°μ΄λ€.
V8μμ§μ΄ κ°μ₯ λμ€μ μΌλ‘ μλ €μ Έμλ€. (Node.jsμ Chromeμμ μ¬μ©λκΈ° λλ¬Έ)
Chrome : V8
Safari : Webkit
FireFox : SpiderMonkey
Edge : Chakra

μ°μ V8μμ§μ΄ μλ°μ€ν¬λ¦½νΈμ μ±λ₯μ λΉμ½μ μΌλ‘ ν₯μμν¬ μ μμλ μ΄μ μ λν΄ μμ보μ.
μμ§μ΄ μλνλ μ리λ μ΄λ λ€. λ¨Όμ μμ§μ΄ μ€νν JS νμΌμ λ°κ² λλ€.
νμ±, AST(Abstract Syntax Tree)λ₯Ό ꡬμΆνλ κ³Όμ μ κ±°μΉλ€.
λ€μμΌλ‘ Interpreterκ° μ½λλ₯Ό μ½μΌλ©° μ€ννλ€.
μ½λλ₯Ό μννλ κ³Όμ μμ νλ‘νμΌλ¬κ° μ§μΌλ³΄λ©° μ΅μ ν ν μ μλ μ½λλ₯Ό μ»΄νμΌλ¬μκ² μ λ¬ν΄μ€λ€. μ£Όλ‘ λ°λ³΅ν΄μ μ€νλλ μ½λ λΈλ‘μ μ»΄νμΌ(μ΅μ ν)νλ€.
κ·Έλ¦¬κ³ μλ μλ μ½λμ μ΅μ νλ μ½λλ₯Ό λ°κΏμ€λ€.
μ½λλ₯Ό μ°μ μΈν°νλ¦¬ν° λ°©μμΌλ‘ μ€ννκ³ νμν λ μ»΄νμΌ νλ λ°©λ²μ JIT(Just-In-Time) μ»΄νμΌλ¬ λΌκ³ λΆλ₯Έλ€.
ν¬λ‘¬μ V8 μμ§μ ν¬ν¨ν΄ Mozillaμ Rhino, Firefoxμ SpiderMonkeyλ κ°μ λ°©λ²μ μ¬μ©νλ€.
κ²°λ‘ μ, μλ°μ€ν¬λ¦½νΈλ μ€νλλ νλ«νΌμ λ°λΌ μΈν°ν리ν κ³Ό μ»΄νμΌμ΄ νΌν©λμ΄ μ¬μ©λλ€.
μ΄ λ°©μμ μλ°μ€ν¬λ¦½νΈμ μ±λ₯μ ν¬κ² ν₯μμμΌ°λ€.
Call Stack & Memory Heap
μλ°μ€ν¬λ¦½νΈ μμ§μ Memory Heapκ³Ό Call StackμΌλ‘ μ΄λ£¨μ΄μ Έμλ€.
Memory Heap : λ³μμ κ°μ²΄μ λ©λͺ¨λ¦¬ ν λΉμ΄ λ°μνλ κ³³
Call Stack : μ½λκ° μ€νλ λλ§λ€ νΈμΆ μ€νμ΄ μμ΄λ κ³³
μλ°μ€ν¬λ¦½νΈ μμ§μ νμ¬ μ§νμν©μ μΆμ νκΈ° μν΄ μ½μ€νμ μ¬μ©νλ€.
μ€νμ LIFO (νμ μ μΆ) ννλ‘ λνμ μΈ μλ£κ΅¬μ‘°μ νλλ€. μλ μμλ₯Ό 보며 μ½μ€νμ λμκ³Όμ μ μ΄ν΄ν΄λ³΄μ.

νκ°μ§ λ κΈ°μ΅νμ. μ½μ€νμ μ€μ½ν λ΄λΆμ μμνμ λ³μλ₯Ό μ μ₯νλ€.
μμνμ λ³μλ string, number λ± λ©λͺ¨λ¦¬ ν¬κΈ°κ° κ³ μ λ λ³μλ€.
μμνμ κ³Ό μ°Έμ‘°νμ μ μ κΉ μ΄ν΄λ³΄μ.
str λ³μλ λ°νμμμ λ©λͺ¨λ¦¬μ ν¬κΈ°κ° λ°λμ§ μλλ€. λ°λ©΄μ arr λ³μλ λ°νμμ νκ°μ element κ° μΆκ°λ μλ, 100κ°κ° μΆκ°λ μλ μλ€. λ°λλ‘ μ§μμ§ μλ μλ€.
μ€μν μ μ ν΄λΉ arr λ³μμ ν¬κΈ°κ° μ λμ μΌλ‘ λ³ννλ€λ μ μ΄λ€.
μ΄λ κ² μμνμ λ°μ΄ν°λ μ½μ€νμ μ μ₯λλ€. μλλΌλ©΄, λ©λͺ¨λ¦¬ νμ μ μ₯λλ€.
CμΈμ΄λ₯Ό μμλ‘ λ€μλ©΄ mallocμ ν΄μ ν λΉν΄μ£Όλ, λμ μΌλ‘ ν¬κΈ°κ° κ²°μ λλ λ°μ΄ν° νμ μ λ©λͺ¨λ¦¬ νμ μ μ₯νλ€λ μκΈ°μ΄λ€.
λ¬Όλ‘ Cμμλ freeλ₯Ό ν΅ν΄ Memory Leakμ λ°©μ§νμ§λ§, μλ°μ€ν¬λ¦½νΈ μμ§μ Garbage Collectorκ° μ΄ μΌμ λμ ν κ²μ΄λ€.
Runtime
μλ°μ€ν¬λ¦½νΈ μμ§μμ μ 곡ν΄μ£Όμ§λ μμ§λ§, μλ°μ€ν¬λ¦½νΈ κ°λ°μκ° μ¬μ©νλ setTimeout κ³Ό κ°μ ν¨μλ€μ΄ μλ€.
μ΄λ¬ν ν¨μλ€μ λΈλΌμ°μ μμ μ 곡νλ Web APIμ΄λ€. κ·Έλ¦¬κ³ μ΄λ° Web APIμ νΈμΆμ μ μ΄νκΈ° μν Callback Queueμ Event Loopκ° μλ€.
μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λ μΈμ΄μ΄κΈ° λλ¬Έμ ν λ²μ ν κ°μ§ μμ λ§ μ€ννλ€. μ½ μ€νμ΄λ νλ‘κ·Έλ¨μμ μ°λ¦¬κ° μ΄λ μλμ§λ₯Ό κΈ°λ‘νλ μλ£ κ΅¬μ‘°μ΄λ€.
ν¨μλ₯Ό μ€ννλ©΄, κ·Έ ν¨μκ° μ½ μ€νμ κ°μ₯ μλ¨μ μμΉνκ² λλ€. κ·Έλ¦¬κ³ ν¨μμ μ€νμ΄ μ’ λ£λλ©΄ κ·Έ ν¨μλ μ€νμμ μ κ±°λλ€.
λ°λ‘ μ¬κΈ°μ νΈμΆ μ€νμ κ° νλͺ©μ μ€ν νλ μμ΄λΌκ³ νλ€.

κ·Έλ°λ° νΈμΆ μ€νμ μ²λ¦¬ μκ°μ΄ κ΅μ₯ν μ€λ 걸리λ ν¨μκ° μμΌλ©΄ μ΄λ»κ² λ κΉ?
μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λμ΄κΈ° λλ¬Έμ ν¨μκ° μ’ λ£λ λκΉμ§ λ€λ₯Έ μμ λ€μ΄ λͺ¨λ λκΈ° μνκ° λ κ²μ΄λ€.
μ΄λ¬ν μν©μ μ μ΄νκΈ° μν΄ μ¬μ©νλ κ²μ΄ λΉλκΈ° μ½λ°±(Asynchronous Callback)μ΄λ€.
μ¦, μ½λ μΌλΆλ₯Ό μ€ννκ³ λμ€μ μ€νλ μ½λ°± ν¨μλ₯Ό μ 곡νλ κ²μ΄λ€. λΉλκΈ° μ½λ°±μ μ¦μ μ½μ€νμ μ¬λΌκ°λ κ²μ΄ μλ, νΉμν μμ μ μ€νμ΄ λλ―λ‘ μ€νμμ λ°λ‘ μ¬λΌκ°μ§ μλλ€.
κ·Έλ¦¬κ³ μ΄ μ½λ°± ν¨μλ€μ μ€μΌμ€μ κ΄λ¦¬νλ κ²μ΄ Event Loopμ΄λ€. μ΄λ²€νΈ 루νλ μ½ μ€νμ΄ λΉμ΄μλ κ²μ νμΈνλ©΄ μ½λ°± νμ λκΈ°μ€μΈ νλͺ©μ μ€νμ μ¬λ¦°λ€.

Sources β¦
Last updated