μλ°μ€ν¬λ¦½νΈλ λ¬΄μ¨ μΈμ΄μΈκ°μ?
μλ°μ€ν¬λ¦½νΈλ μΉ νμ΄μ§μμ 볡μ‘ν κΈ°λ₯μ ꡬνν μ μλ μ€ν¬λ¦½ν λλ νλ‘κ·Έλλ° μΈμ΄μ λλ€.
μλ°μ€ν¬λ¦½νΈλ κ³ μμ€μ μΈμ΄μ΄κ³ , μΈν°νλ¦¬ν° κΈ°λ°μ μΈμ΄μ λλ€. λν, νλ‘ν νμ μ κΈ°λ°μΌλ‘ ν κ°μ²΄μ§ν₯ μΈμ΄μ λλ€. νμ§λ§, μλ°μ€ν¬λ¦½νΈλ λͺ λ Ήν, ν¨μν, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ΄ λͺ¨λ κ°λ₯ν λ©ν° ν¨λ¬λ€μ μΈμ΄μ λλ€.
μλ°μ€ν¬λ¦½νΈκ° λμ μΈμ΄μΈ μ΄μ λ 무μμΈκ°μ?
μλ°μ€ν¬λ¦½νΈλ λ³μλ₯Ό μ μΈν λ νμ μ μ§μ νμ§ μμΌλ©°, μ€ν μ€μ κ°μ΄ λ³κ²½λλ©΄ κ·Έμ λ°λΌ νμ λ λ³νλ λμ νμ μ λλ€.
λν, μλ°μ€ν¬λ¦½νΈλ μ»΄νμΌ νμμ΄ μλ λ°νμμ νμ μ κ²°μ ν©λλ€.
κ°μ²΄λ μμ±μ λμ μΌλ‘ μΆκ° λ° μμ ν μ μμΌλ―λ‘ μλ°μ€ν¬λ¦½νΈλ λμ μΈμ΄μ λλ€.
ν΄λ‘μ λ 무μμ΄κ³ μ μ©ν λ μ£Όμν μ μ 무μμΈκ°μ?
**ν΄λ‘μ (Closure)**λ λ΄λΆ ν¨μκ° μμ μ΄ μ μΈλ λ μ컬 νκ²½μ κΈ°μ΅νμ¬, μΈλΆ ν¨μκ° μ’ λ£λ μ΄νμλ κ·Έ νκ²½μ μ κ·Όν μ μλ ν¨μλ₯Ό λ§ν©λλ€.
μλ₯Ό λ€μ΄, μΈλΆ ν¨μμ μ§μ λ³μλ₯Ό λ΄λΆ ν¨μκ° κ³μ μ°Έμ‘°νκ³ μμ κ²½μ°, ν΄λΉ λ³μλ μ€ν 컨ν μ€νΈκ° μ¬λΌμ Έλ λ©λͺ¨λ¦¬μ μ μ§λ©λλ€.
μ΄ νΉμ± λλΆμ ν΄λ‘μ λ μ 보 μλ, μν μ μ§, μ½λ°± κ΅¬μ± λ± λ€μν μν©μμ μ μ©νκ² μ°μ λλ€.
λ€λ§, ν΄λ‘μ λ₯Ό μ¬μ©ν λλ λ©λͺ¨λ¦¬ λμμ μ£Όμν΄μΌ ν©λλ€. μΈλΆ λ³μλ₯Ό μ°Έμ‘°ν λ΄λΆ ν¨μκ° μ€λ«λμ μ μ§λλ©΄, ν΄λΉ λ³μλ λ©λͺ¨λ¦¬μμ ν΄μ λμ§ μμ λΆνμν λ©λͺ¨λ¦¬ μ¬μ©μ΄ κ³μλ μ μμ΅λλ€. νΉν μ΄λ²€νΈ 리μ€λλ νμ΄λ¨Έ λ΄λΆμμ ν΄λ‘μ λ₯Ό μ¬μ©ν λλ, λ μ΄μ νμνμ§ μλ€λ©΄ μ°Έμ‘°λ₯Ό λκ±°λ nullλ‘ μ€μ νλ λ±μ μ 리 μμ μ΄ νμν©λλ€.
λν, ν΄λ‘μ λ λ³μλ₯Ό κ°μ΄ μλ μ°Έμ‘°λ‘ κΈ°μ΅νκΈ° λλ¬Έμ, ν΄λ‘μ λ₯Ό 곡μ νλ μ¬λ¬ ν¨μκ° λμΌν λ³μλ₯Ό μ°Έμ‘°νκ² λλ©΄, μλμΉ μμ κ° λ³κ²½μ΄ λ°μν μ μμ΄ μ£Όμκ° νμν©λλ€.
μ€ν 컨ν μ€νΈμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μ€ν 컨ν μ€νΈλ μλ°μ€ν¬λ¦½νΈ μ½λκ° μ€νλλ νκ²½ μ 보λ₯Ό λ΄κ³ μλ κ°μ²΄μ λλ€.
μ μ μ½λκ° μ€νλ λ μ μ μ€ν 컨ν μ€νΈκ° μμ±λκ³ , ν¨μκ° νΈμΆλ λλ§λ€ κ°κ°μ μ€ν 컨ν μ€νΈκ° μμ±λ©λλ€.
μ€ν 컨ν μ€νΈλ μ€ν ꡬ쑰(Execution Context Stack)λ‘ κ΄λ¦¬λλ©°, κ°μ₯ μμ μλ 컨ν μ€νΈκ° νμ¬ μ€ν μ€μΈ μ½λμ ν΄λΉν©λλ€.
ν΄λ‘μ μ μ€ν 컨ν μ€νΈλ₯Ό μ°κ΄μ§μ΄μ μ€λͺ ν΄μ£ΌμΈμ.
μλ°μ€ν¬λ¦½νΈμμ ν¨μκ° νΈμΆλλ©΄ μλ‘μ΄ ν¨μ μ€ν 컨ν μ€νΈκ° μμ±λκ³ , ν΄λΉ 컨ν μ€νΈμλ λ³μ κ°μ²΄, μ€μ½ν 체μΈ, this κ° λ±μ΄ ν¬ν¨λ©λλ€.
μ΄λ ν¨μ λ΄λΆμμ μ μΈλ νμ ν¨μλ, μμ ν¨μμ μ€νμ΄ μ’ λ£λ μ΄νμλ μμ μ΄ μ μΈλ λΉμμ λ μ컬 νκ²½μ μ€μ½ν 체μΈμ ν΅ν΄ μ°Έμ‘°ν μ μμ΅λλ€. μ΄μ²λΌ μ€ν 컨ν μ€νΈλ μ¬λΌμ‘μ§λ§, ν΄λΉ 컨ν μ€νΈμ λ μ컬 νκ²½μ΄ λ΄λΆ ν¨μμ μν΄ κ³μ μ μ§λλ©° μ°Έμ‘°λλ κ΅¬μ‘°κ° λ°λ‘ ν΄λ‘μ μ ν΅μ¬μ λλ€.
μ¦, ν΄λ‘μ λ μ€ν 컨ν μ€νΈκ° μ’ λ£λ μ΄νμλ κ·Έ μμ λ³μμ μ κ·Όν μ μλλ‘ νλ λ©μ»€λμ¦ μ΄λΌκ³ μ΄ν΄ν μ μμ΅λλ€.
λ μ컬 νκ²½μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
λ μ컬 νκ²½μ μ€ν 컨ν μ€νΈμ κ΅¬μ± μμ μ€ νλλ‘, μ€ν μ€μΈ μ½λμμ μ μΈλ λ³μλ ν¨μ μ μΈ, μμ μ€μ½ν μ 보 λ±μ λ΄κ³ μλ κ°μ²΄μ λλ€.
βEnvironment Recordβ : μ€μ λ³μλ ν¨μ μλ³μμ κ°λ€μ μ μ₯
βOuter Enviroment Referenceβ : μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘° β μ΄κ±Έ ν΅ν΄ μ€μ½ν 체μ΄λ
μ€μ½ν(Scope)μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μ€μ½νλ λ³μλ ν¨μκ° μ ν¨ν λ²μ, μ¦ ν΄λΉ λ³μλ ν¨μμ μ κ·Όν μ μλ μ½λμ μμμ μλ―Έν©λλ€.
μ€μ½νμ μ’ λ₯μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
- κΈλ‘λ² μ€μ½ν : λ³μλ ν¨μκ° μ΄ν리μΌμ΄μ μ 체μμ μ κ·Όμ΄ κ°λ₯ν κ²½μ°
- ν¨μ μ€μ½ν : ν¨μ λ΄μμ μ μΈλ λ³μλ κ·Έ ν¨μ λ΄μμλ§ μ ν¨ν¨
- λΈλ‘ μ€μ½ν :Β
let
μ΄λΒconst
λ‘ μ μΈλ λ³μλ λΈλ‘ λ΄μμλ§ μ ν¨ν©λλ€.
μ€μ½ν 체μΈμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μ€μ½ν 체μΈμ μλ°μ€ν¬λ¦½νΈμμ λ³μλ₯Ό μ°Ύμ λ, κ° μ€μ½νμ κ΄κ³μ λ°λΌ λ³μλ₯Ό μ°¨λ‘λ‘ κ²μνλ μ²΄μΈ κ΅¬μ‘°μ λλ€. μ΄ μ²΄μΈμ λ΄λΆ ν¨μκ° μΈλΆ ν¨μμ λ³μμ μ κ·Όν μ μκ² ν©λλ€.
μ¦, κ°μ₯ μμͺ½λΆν° λ³μλ₯Ό μ°Ύμ λκΉμ§ λ°κΉ₯μͺ½μΌλ‘ μ€μ½νλ₯Ό λνλκ°λλ€.
νΈμ΄μ€ν μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μλ°μ€ν¬λ¦½νΈλ μ€ν μ μ μ½λ μ 체λ₯Ό νμ±νκ³ , μ€ν 컨ν μ€νΈλ₯Ό μμ±ν©λλ€. μ΄ κ³Όμ μμ λ³μλ ν¨μ μ μΈμ΄ λ©λͺ¨λ¦¬μ λ±λ‘λλ©°, μ΄λ₯Ό νΈμ΄μ€ν (Hoisting)μ΄λΌκ³ ν©λλ€.
νΈμ΄μ€ν μ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ½λλ₯Ό μ€ννκΈ° μ μ, λ³μ λ° ν¨μ μ μΈμ ν΄λΉ μ€μ½νμ κ°μ₯ μμͺ½μΌλ‘ λμ΄μ¬λ¦¬λ κ²μ²λΌ λμνλ λ°©μμ λ§ν©λλ€. μ€μ λ‘ μ½λκ° λ¬Όλ¦¬μ μΌλ‘ μ΄λνλ κ²μ μλμ§λ§, μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μ½λλ₯Ό μ²λ¦¬ν λ κ·Έλ κ² ν΄μνλ€κ³ μ΄ν΄νμλ©΄ λ©λλ€. μ¬κΈ°μ μ€μν μ μ μ μΈ(Declaration)λ§ λμ΄μ¬λ €μ§λ€λ κ²μ λλ€. κ°μ ν λΉ(Assignment)νλ λΆλΆμ μλ μ리μ κ·Έλλ‘ λ¨μμμ΅λλ€.
μλ°μ€ν¬λ¦½νΈμ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λν΄ μλ λλ‘ μ€λͺ ν΄μ£ΌμΈμ
μλ°μ€ν¬λ¦½νΈλ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ¬μ©ν©λλ€. μ΄λ₯Ό μ€λͺ νκΈ° μν΄ λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό λ¨Όμ μ€λͺ νκ² μ΅λλ€.
μλ°μ€ν¬λ¦½νΈμ λ©λͺ¨λ¦¬ ꡬ쑰λ μ€νκ³Ό ν. λ κ°μ§λ‘ λλμ΄μ Έ μμ΅λλ€. μ€νμλ μμνμ μ μ μ₯νκ³ , νμλ κ°μ²΄νμ μ μ μ₯ν©λλ€.
λͺ¨λ λ³μλ λ¨Όμ μ€νμ κ°λ¦¬ν΅λλ€. μμ κ°μ΄ μλ κ²½μ° μ€νμλ νμ κ°μ²΄μ λν μ°Έμ‘°κ° ν¬ν¨λ©λλ€. νμ λ©λͺ¨λ¦¬λ νΉμ ν λ°©μμΌλ‘ μ λ ¬λμ§ μμΌλ―λ‘, μ€νμ λν μ°Έμ‘°λ₯Ό μ μ§ν΄μΌ ν©λλ€.
μ€νμ κ²½μ°, ν¨μ λ΄μμ μ μΈλ λ³μλ€μ ν¨μκ° μ’ λ£λλ©΄ μλμΌλ‘ μ 리λ©λλ€. νμ κ²½μ°λ, κ°λΉμ§ 컬λ ν°λ₯Ό ν΅ν΄ λ μ΄μ μ°Έμ‘°λμ§ μλ κ°μ²΄λ₯Ό μλμΌλ‘ μ κ±°ν©λλ€.
μ°Έκ³ : [λ²μ] μλ°μ€ν¬λ¦½νΈμ λ©λͺ¨λ¦¬ κ΄λ¦¬ μ€λͺ
μ½ μ€ν (Call Stack)κ³Ό ν (Heap)μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μ½ μ€νμ ν¨μ μ€ν 컨ν μ€νΈκ° μμ΄λ μ€νꡬ쑰μ λλ€. ν¨μλ₯Ό νΈμΆνλ©΄ μ€νμ μΆκ°λκ³ , μ€νμ΄ λλλ©΄ μ κ±°λ©λλ€. μλ°μ€ν¬λ¦½νΈλ λ¨μΌ μ€λ λ νκ²½μ΄λ―λ‘ μ½ μ€νμ΄ νλλΏμ λλ€.
νμ λμ λ©λͺ¨λ¦¬ ν λΉμ λ΄λΉνλ μμμ λλ€. μ½ μ€νμ²λΌ μ ν΄μ§ κ΅¬μ‘°κ° μμΌλ©°, κ°μ²΄μ κ°μ μ°Έμ‘°ν λ°μ΄ν°κ° μ μ₯λ©λλ€. κ°λΉμ§ 컬λ ν°μ μν΄ κ°μ²΄λ₯Ό μ λ¦¬ν΄ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬λ©λλ€.
JSμμ Garbage Collectionμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μλ°μ€ν¬λ¦½νΈλ κ°λ°μκ° μ§μ λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ ν΄μ νλ μΈμ΄λ€κ³Ό λ¬λ¦¬, μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μμμ μ 리ν΄μ£ΌλΒ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬Β κΈ°λ₯μ κ°μ§κ³ μμ΅λλ€. μ΄ κΈ°λ₯μ λ°λ‘ κ°λΉμ§ 컬λ μ μ΄λΌκ³ λΆλ¦ λλ€.
ν΅μ¬ μμ΄λμ΄λΒ 'λ μ΄μ λλ¬ κ°λ₯νμ§ μμ(unreachable)' κ°μ²΄λ₯Ό μ°Ύμ λ©λͺ¨λ¦¬μμ μ κ±°νλ κ²μ λλ€. μ¬κΈ°μ 'λλ¬ κ°λ₯'νλ€λ κ²μ, μ½λ μ΄λκ°μμ μ°Έμ‘°λ₯Ό ν΅ν΄ μ κ·Όν μ μλ€λ μλ―Έμ λλ€.
μ΄ κ°λΉμ§ 컬λ μ λλΆμ κ°λ°μλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λν λΆλ΄μ ν¬κ² λ μ μμ΅λλ€.
νμ§λ§ μμ ν μ κ²½ μ°μ§ μμλ λλ κ²μ μλλλ€. μλ₯Ό λ€μ΄ λ μ΄μ μ¬μ©νμ§ μλ κ°μ²΄μ λν μ°Έμ‘°λ₯Ό μ½λ μ΄λκ°μ λ¨κ²¨λλ©΄ κ°λΉμ§ 컬λ ν°κ° κ·Έ κ°μ²΄λ₯Ό μ¬μ© μ€μ΄λΌκ³ νλ¨ν΄μ λ©λͺ¨λ¦¬ λμ(memory leak)κ° λ°μν μλ μμ΅λλ€.
μ격(strict) λͺ¨λμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
JSμ μ€λ₯λ₯Ό λ³΄λ€ μ격νκ² κ²μ¬νλ λͺ¨λλ‘ μ묡μ λ³μ μ μΈμ΄ κΈμ§λκ³ ,Β this
λ°μΈλ©μ΄ μ νλλ λ± μ¬λ¬κ°μ§κ° μ νλ©λλ€.
- μ μΈνμ§ μμ λ³μμ κ°μ ν λΉνλ €κ³ νλ©΄ μλ¬λ₯Ό λ°μμν΅λλ€. μλ μΌλ° λͺ¨λμμλ κ·Έλ₯ μ μ λ³μκ° λμ΄λ²λ €μ λ¬Έμ λ₯Ό μ°ΎκΈ° μ΄λ €μΈ μ μμμ£ . λ, μμ ν μ μλ νλ‘νΌν°λ₯Ό μμ νλ €κ³ ν λλ μλ¬λ₯Ό λ λλ€.
μΌλ° ν¨μ λ΄μμ thisκ° μλλ μ μ κ°μ²΄(λΈλΌμ°μ μμλ window)λ₯Ό κ°λ¦¬μΌ°λλ°, μ격 λͺ¨λμμλ undefinedλ₯Ό κ°λ¦¬ν€κ² ν΄μ μλμΉ μμ μ μ μ€μΌμ λ§μμ€λλ€.
μΌλ° ν¨μμ νμ΄ν ν¨μμ this λ°μΈλ© μ°¨μ΄μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
μΌλ° ν¨μ
- κ°μ²΄μ λ©μλλ‘μ ν¨μλ₯Ό νΈμΆν κ²½μ°, thisλ ν΄λΉ κ°μ²΄(obj)λ₯Ό κ°λ¦¬ν΅λλ€.
- μ΅μλ¨μμ νΈμΆν μμ thisλ strict modeμμλ undefinedμ΄κ³ , non-strict modeμμλ μ μ κ°μ²΄λ₯Ό κ°λ¦¬ν΅λλ€.
νμ΄ν ν¨μ
- μ체μ μΈ this λ°μΈλ©μ κ°μ§ μμ΅λλ€. μμ μ κ°μΌ κ°μ₯ κ°κΉμ΄ μμ μ€μ½νμ this κ°μ κ·Έλλ‘ μ¬μ©ν©λλ€.
μμ±μ ν¨μμ κ²½μ°μλ, λ―Έλμ μμ±ν μΈμ€ν΄μ€κ° λ°μΈλ©λ©λλ€.
μΌκΈ κ°μ²΄μ 쑰건μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
- 무λͺ μ 리ν°λ΄λ‘ μμ±ν μ μλ€.
- λ³μλ μλ£κ΅¬μ‘°(κ°μ²΄, λ°°μ΄ λ±)μ μ μ₯ν μ μλ€.
- ν¨μμ λ§€κ°λ³μμ μ λ¬ν μ μλ€.
- ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€.
Call By Value, Call By Referenceμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
λ€, Call by Valueμ Call by Referenceλ ν¨μμ μΈμ(argument)λ₯Ό μ λ¬ν λ, κ·Έ κ°μ΄ μ΄λ»κ² μ λ¬λλμ§μ λν λ°©μμ μ°¨μ΄λ₯Ό λ§ν©λλ€.
Call by Value (κ°μ μν νΈμΆ)λ ν¨μλ₯Ό νΈμΆν λ μΈμλ‘Β κ° μ체μ 볡μ¬λ³Έμ λ겨주λ λ°©μμ λλ€.
- μ£Όλ‘ μ«μ, λ¬Έμμ΄, λΆλ¦¬μΈ κ°μΒ μμ νμ (Primitive type)Β λ°μ΄ν°κ° μ΄ λ°©μμΌλ‘ μ λ¬λ©λλ€.
- ν¨μ λ΄λΆμμ λ§€κ°λ³μ(parameter)μ κ°μ λ³κ²½νλλΌλ, ν¨μ μΈλΆμ μλ λ³μμλ μλ¬΄λ° μν₯μ μ£Όμ§ μμ΅λλ€. μλνλ©΄ ν¨μλ κ°μ 볡μ¬λ³Έμ λ°μμ μ¬μ©νκΈ° λλ¬Έμ λλ€.
Call by Reference (μ°Έμ‘°μ μν νΈμΆ)λ ν¨μλ₯Ό νΈμΆν λ μΈμλ‘ κ°μ΄ μ μ₯λ λ©λͺ¨λ¦¬ μ£Όμ(μ°Έμ‘°)λ₯Ό λ겨주λ λ°©μμ λλ€.
- μλ°μ€ν¬λ¦½νΈμμλ κ°μ²΄, λ°°μ΄ κ°μΒ κ°μ²΄ νμ (Object type)Β λ°μ΄ν°κ° μ΄ λ°©μμΌλ‘ λμνλ€κ³ νν μ€λͺ ν©λλ€. (μ ννλ 'Call by Sharing' λλ 'κ°(μ°Έμ‘°κ°)μ μν νΈμΆ'λ‘ λ³΄λ κ²μ΄ λ λ§μ§λ§, κ²°κ³Όμ μΌλ‘ μ°Έμ‘°μ²λΌ λμνλ κ²½μ°κ° λ§μ΅λλ€.)
- ν¨μ λ΄λΆμμ λ§€κ°λ³μλ₯Ό ν΅ν΄ κ°μ²΄μ μμ±μ λ³κ²½νλ©΄, ν¨μ μΈλΆμ μλ κ°μ²΄μλ κ·Έ λ³κ²½ μ¬νμ΄ λ°μλ©λλ€. μλνλ©΄ ν¨μ λ΄λΆμ λ§€κ°λ³μμ ν¨μ μΈλΆμ λ³μκ° κ°μ λ©λͺ¨λ¦¬ μ£Όμμ μλ λμΌν κ°μ²΄λ₯Ό κ°λ¦¬ν€κ³ μκΈ° λλ¬Έμ λλ€.
- μ€μν μ μ, μλ°μ€ν¬λ¦½νΈμμ κ°μ²΄λ₯Ό λκΈΈ λΒ ν¨μ μμμ κ·Έ κ°μ²΄ μ체λ₯Ό λ€λ₯Έ κ°μ²΄λ‘ μ¬ν λΉνλ©΄, μλ³Έ κ°μ²΄λ λ°λμ§ μλλ€λ κ²μ λλ€. μ²μμλ λ§€κ°λ³μμ κ°μ κ°μ²΄λ₯Ό κ°λ¦¬μΌ°μ§λ§, ν¨μ μμμ μλ‘μ΄ κ°μ²΄λ₯Ό ν λΉλ°μΌλ©΄μ μ°κ²°μ΄ λμ΄μ‘κΈ° λλ¬Έμ λλ€.
call, apply, bindμ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
call, apply, bind λͺ¨λ ν¨μμ this κ°μ λͺ μμ μΌλ‘ μ€μ νκ³ ν¨μλ₯Ό νΈμΆνλ λ©μλμ λλ€.
- call: ν¨μμ μ λ¬ν μΈμλ€μ κ°λ³μ μΌλ‘ μΌνλ‘ κ΅¬λΆνμ¬ μ λ¬νκ³ , μ¦μ μ€νν©λλ€.
- apply: ν¨μμ μ λ¬ν μΈμλ€μ λ°°μ΄ λλ μ μ¬ λ°°μ΄ κ°μ²΄ ννλ‘ μ λ¬νκ³ , μ¦μ μ€νν©λλ€.
- bind: thisκ° μꡬν λ°μΈλ©λ μλ‘μ΄ ν¨μλ₯Ό λ°νν©λλ€. ν¨μλ₯Ό μ¦μ μ€ννμ§ μμ΅λλ€.
callκ³Ό applyμ μ°¨μ΄λ μΈμ μ λ¬ λ°©μλ°μ μμ.
thisμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
this
λ μμ μ΄ μν κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ₯Ό μ°Έμ‘°ν μ μλ ν€μλμ
λλ€.
this
μ κ°μ νΈμΆλλ λ°©μμ λ°λΌ λ¬λΌμ§λλ€.
- μ μμμλΒ
window
,Βglobal
μ κ°λ¦¬ν΅λλ€. - κ°μ²΄μμλ ν΄λΉ κ°μ²΄λ₯Ό κ°λ¦¬ν΅λλ€.
- ν΄λμ€μμλ μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν΅λλ€.
- νμ΄ν ν¨μ(Arrow Function)μμλ μμ μ€μ½νμΒ
this
λ₯Ό μμλ°μ΅λλ€.
μ΄ν°λ¬λΈκ³Ό μ΄ν°λ μ΄ν° νλ‘ν μ½μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μ΄ν°λ¬λΈ νλ‘ν μ½
Symbol.iterator
λ₯Ό νλ‘νΌν° ν€λ‘ μ¬μ©ν λ©μλλ₯Ό μ§μ ꡬννκ±°λ νλ‘ν νμ 체μΈμ ν΅ν΄ μμλ°μΒSymbol.iterator
λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν μ΄ν°λ μ΄ν°λ₯Ό λ°νν©λλ€.
μ΄ν°λ¬λΈ νλ‘ν μ½μ μ€μν κ°μ²΄λ₯ΌΒ μ΄ν°λ¬λΈμ΄λΌ ν©λλ€.
μ΄ν°λ μ΄ν° νλ‘ν μ½
μ΄ν°λ¬λΈμΒ
Symbol.iterator
Β λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν μ΄ν°λ μ΄ν°λ₯Ό λ°νν©λλ€. μ΄ν°λ μ΄ν°λΒnext
Β λ©μλλ₯Ό μμ νλ©°Βnext
Β λ©μλλ₯Ό νΈμΆνλ©΄ μ΄ν°λ¬λΈμ μννλ©°Βvalue
μΒdone
Β νλ‘νΌν°λ₯Ό κ°λΒ μ΄ν°λ μ΄ν° 리μ νΈ κ°μ²΄λ₯Ό λ°νν©λλ€.
μ΄ν°λ μ΄ν° νλ‘ν μ½μ μ€μν κ°μ²΄λ₯ΌΒ μ΄ν°λ μ΄ν°λΌ ν©λλ€.
μ λλ μ΄ν°μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μ λλ μ΄ν°λ λ°λ³΅ κ°λ₯ν(Iterable) ν¨μλ‘, μ€νμ μ€κ°μ λ©μ·λ€κ° λ€μ μμν μ μλ ν¨μμ λλ€.
function*
Β ν€μλλ₯Ό μ¬μ©ν΄ μ μνλ©°,Β yield
Β ν€μλλ₯Ό μ¬μ©νμ¬ κ°μ λ°νν μ μμ΅λλ€.
λν,Β yield
ν€μλλ₯Ό λ§λλ©΄ μ€νμ΄ λ©μΆκ³ Β next()
Β λ©μλλ₯Ό νΈμΆνλ©΄ λ€μ μ€νμ΄ μ΄μ΄μ§λλ€.
μ λλ μ΄ν° κ°μ²΄λ μ΄ν°λ μ΄ν°μ΄μ μ΄ν°λ¬λΈμ λλ€.
μ΄λ₯Ό ν΅ν΄ λ©λͺ¨λ¦¬ ν¨μ¨μ±μ΄ μ¬λΌκ° μ μμ΅λλ€.
var, let, const μ°¨μ΄λ₯Ό μ€λͺ ν΄μ£ΌμΈμ
var
λ‘ μ μΈλ λ³μλ μ μΈλκΈ° μ μ μ κ·Όν΄λ undefinedκ°μ λ°νν©λλ€. λν ν¨μ μ€μ½νλ₯Ό κ°κΈ° λλ¬Έμ, ν¨μ λ΄λΆμμ μ μΈλμλ€λ©΄ ν¨μ λ΄λΆμμλ§ μν₯μ λ°κ³ , ν¨μ μΈλΆμμ μ μΈλμλ€λ©΄ μ μ μ€μ½νμμ μ ν¨ν©λλ€. λν, μ€λ³΅μ μΈκ³Ό μ¬ν λΉμ΄ κ°λ₯ν©λλ€.
let
μ΄λΒ const
λ‘ μ μΈλ λ³μλ μ μΈλκΈ° μ μ μ κ·Όν μ μκ³ , λΈλ‘ μ€μ½νλ₯Ό κ°κΈ°λλ¬Έμ, μ½λ λΈλ‘ λ΄μμ μ ν¨ν©λλ€. λ κ²½μ° λͺ¨λ μ€λ³΅μ μΈμ΄ λΆκ°λ₯νμ§λ§,Β let
μ κ²½μ°λ μ¬ν λΉμ΄ κ°λ₯νκ³ Β const
λ μ¬ν λΉμ΄ λΆκ°λ₯ν©λλ€.
var
- μ μΈ + μ΄κΈ°ν λ¨κ³κ° μ½λ μ€ν μ μ λμμ μ΄λ£¨μ΄μ§λλ€. μ¦, μ€μ½ν μ΅μλ¨μΌλ‘ λμ΄μ¬λ €μ ΈΒ undefinedλ‘ μ΄κΈ°νλ©λλ€.
- λ°λΌμ μ½λ μ€ν μ€ μ μΈλ¬Έ μ΄μ μ λ³μμ μ κ·Όν΄λ μλ¬ μμ΄Β undefinedκ° λμ΅λλ€.
- ν λΉ λ¨κ³λ μλ μ½λ μμΉμμ μ€νλ©λλ€.
let, const
- μ μΈ λ¨κ³λ§ μ½λ μ€ν μ μ μ΄λ£¨μ΄μ§λλ€. μ€μ½ν μ΅μλ¨μΌλ‘ λμ΄μ¬λ €μ Έ λ³μ μ΄λ¦μ λ±λ‘λ©λλ€.
- μλ μ½λ μμΉμ λλ¬νμ λ μ΄κΈ°νμ ν λΉμ΄ μ΄λ£¨μ΄μ§λλ€. μ μΈ λ¨κ³μ μ΄κΈ°ν λ¨κ³ μ¬μ΄μ **μΌμμ μ¬κ°μ§λ(TDZ)**κ° μ‘΄μ¬ν©λλ€. 1. TDZ ꡬκ°μμ ν΄λΉ λ³μμ μ κ·Όνλ©΄Β ReferenceErrorκ° λ°μν©λλ€. μ΄κΈ°νλκΈ° μ μλ λ³μλ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
TDZμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
TDZ(Temporal Dead Zone)λ let λλ constλ‘ μ μΈλ λ³μκ° μ΄κΈ°νλκΈ° μ μ μ κ·Όν μ μλ μμμ μλ―Έν©λλ€.
letκ³Ό constλ νΈμ΄μ€ν μ΄ λμ§λ§ μ΄κΈ°νλμ§λ μκΈ°λλ¬Έμ TDZμ λ€μ΄κ°λλ€.
JSμ λ°μ΄ν° νμ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μλ°μ€ν¬λ¦½νΈμ λ°μ΄ν° νμ μ μμνμ κ³Ό κ°μ²΄νμ μΌλ‘ λλ©λλ€. μμνμ μ κ°μ΄ λ³κ²½λμ§ μλ λΆλ³λ°μ΄ν°μ λλ€. number, boolean, string, undefined, null, bigInt, symbolμ΄ μμ΅λλ€.
κ°μ²΄νμ μ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μ μ₯νμ¬ λ³μμ κ°μ 볡μ¬νλ©΄ μ£Όμλ§ λ³΅μ¬λ©λλ€. μλ³Έμ΄ λ³κ²½λλ©΄ μ°Έμ‘°νκ³ μλ λͺ¨λ λ³μμ μνμ μ€λλ€.
λ³μ μ μΈ, μ΄κΈ°ν, ν λΉμ μ°¨μ΄μ μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
λ¨Όμ μ μΈμ μλ°μ€ν¬λ¦½νΈ μμ§μκ² 'μ΄μ λΆν° μ΄λ° μ΄λ¦μ λ³μλ₯Ό μ¬μ©νκ² λ€'λΌκ³ μλ €μ£Όλ κ³Όμ μ λλ€. μλ₯Ό λ€μ΄Β let myVar;Β λΒ const myConst;Β μ²λΌ ν€μλ(let,Β const,Β var)μ λ³μ μ΄λ¦μ μ μ΄μ λ³μμ μ‘΄μ¬λ₯Ό μ리λ κ±°μ£ . μ΄λ ν΄λΉ λ³μλ₯Ό μν λ©λͺ¨λ¦¬ 곡κ°μ΄ ν보λ©λλ€.
λ€μμΌλ‘ μ΄κΈ°νλ μ΄λ κ² μ μΈλ λ³μμΒ μ²μμΌλ‘ κ°μ λ£μ΄μ£Όλ κ²μ λ§ν©λλ€. μ μΈ λ¨κ³μμ ν보λ λ©λͺ¨λ¦¬ 곡κ°μ μ€μ κ°μ μ°κ²°νλ κ³Όμ μ΄μ£ .Β let myVar = 10;Β μ²λΌ μ μΈκ³Ό λμμ κ°μ ν λΉνλ©΄, μ΄κ² μ μΈμ΄μ μ΄κΈ°νκ° λλ κ²λλ€.Β varλΒ letμ κ²½μ°, μ μΈλ§ νκ³ κ°μ ν λΉνμ§ μμΌλ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ μλμΌλ‘Β undefinedλΌλ κ°μΌλ‘ μ΄κΈ°νλ₯Ό ν΄μ€λλ€. νμ§λ§Β constλ μ μΈν λ λ°λμ κ°μ ν λΉν΄μ μ΄κΈ°νν΄μΌ ν©λλ€.
λ§μ§λ§μΌλ‘ ν λΉμ μ΄λ―Έ μ μΈλκ³ (λ³΄ν΅ μ΄κΈ°νκΉμ§ λ) λ³μμΒ μλ‘μ΄ κ°μ μ μ₯νλ κ²μ μλ―Έν©λλ€. μλ₯Ό λ€μ΄, μκΉΒ let myVar = 10;Β μΌλ‘ μ΄κΈ°ννλ€λ©΄, λμ€μ μ½λμμΒ myVar = 20;Β μ΄λ κ² λ€λ₯Έ κ°μ λ£λ κ²μ΄ λ°λ‘ ν λΉμ λλ€. μ΄λ―Έ μ‘΄μ¬νλ λ³μμ κ°μ μ λ°μ΄νΈνλ κ³Όμ μ λλ€. λ¬Όλ‘ Β constλ‘ μ μΈλ λ³μλ μ¬ν λΉμ΄ λΆκ°λ₯νμ£ .
null / undefined / NaN μ λΉκ΅ν΄μ μ€λͺ ν΄μ£ΌμΈμ.
undefinedλ λ³μκ° μ μΈμ λμμ§λ§ μμ§ μ΄λ€ κ°λ ν λΉλμ§ μμ μνλ₯Ό μλ―Έν©λλ€.
nullμ κ°λ°μκ°Β μλμ μΌλ‘ 'κ°μ΄ μμ' λλ 'λΉμ΄ μμ'μ λνλ΄κΈ° μν΄Β μ¬μ©νλ κ°μ λλ€.
NaNμ "Not a Number"μ μ½μλ‘,Β μ«μ μ°μ°μ νμ§λ§ κ·Έ κ²°κ³Όκ° μ ν¨ν μ«μκ° μλ λΒ λνλλ νΉλ³ν μ«μ κ°μ λλ€.
μμ 볡μ¬μ κΉμ 볡μ¬μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μμ 볡μ¬λ κ°μ²΄λ λ°°μ΄μ 1λ¨κ³ μμ±λ§ 볡μ¬νκ³ , μ€μ²©λ κ°μ μ°Έμ‘°λ₯Ό 볡μ¬ν©λλ€.
κΉμ 볡μ¬λ κ°μ²΄λ λ°°μ΄μ λͺ¨λ μμ±μ΄λ μμλ₯Ό μ¬κ·μ μΌλ‘ 볡μ¬νκ³ , μ€μ²©λ κ°μ²΄κΉμ§ 볡μ¬ν©λλ€.
μμ λΉκ΅μ κΉμ λΉκ΅μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μμ λΉκ΅λ λ κ°μ²΄λ λ°°μ΄μ μ°Έμ‘°λ§ λΉκ΅ν©λλ€. λ°λΌμ κ°μ΄ κ°λλΌλ λΉκ΅ κ²°κ³Όκ° falseκ° λμ¬ μλ μμ΅λλ€.
κΉμ λΉκ΅λ λ κ°μ²΄λ λ°°μ΄μ λͺ¨λ μμ±μ΄λ λͺ¨λ μμλ₯Ό μ¬κ·μ μΌλ‘ λΉκ΅ν©λλ€. μ¦, κ°μ²΄κ° μ€μ²©λμ΄ μμΌλ©΄ κ·Έ λ΄λΆμ μμ±κΉμ§ λΉκ΅νμ¬ λ κ°μ²΄λ λ°°μ΄μ΄ λμΌνμ§ νμΈν©λλ€.
μλ°μ€ν¬λ¦½νΈμμ μΌμ΄λλ λ°μ΄ν° νλ³νμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μλ°μ€ν¬λ¦½νΈμμλ 2κ°μ§μ λ°©λ²μΌλ‘ λ°μ΄ν° νλ³νμ΄ μΌμ΄λ©λλ€.
- μ묡μ λ³ν :Β
+
,Β ,Β==
Β λ±μ κΈ°νΈλ₯Ό ν΅ν΄ μλμΌλ‘ νμ μ λ³νν©λλ€. - 묡μμ λ³ν : String, Number λ±μΌλ‘ μ§μ λ°μ΄ν° νμ μ λ³νν©λλ€.
Prototypeκ³Ό Prototype Chainingμ΄λ?
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ²΄λ€μ λ©μλμ μμ±λ€μ μμλ°κΈ° μν ν νλ¦ΏμΌλ‘μ¨ νλ‘ν νμ μ κ°μ΅λλ€.
μ νν λ§νμλ©΄ μμλλ μμ±κ³Ό λ©μλλ€μ κ° κ°μ²΄κ° μλλΌ κ°μ²΄μ μμ±μμ prototypeμ΄λΌλ μμ±μ μ μλμ΄μμ΅λλ€.
νλ‘ν νμ 체μΈμ κ°μ²΄μμ μμ±μ μ°Ύμ λ λΆλͺ¨μ νλ‘ν νμ μ λ°λΌ κ²μνλ ꡬ쑰μ λλ€. κ°μ²΄ μΈμ€ν΄μ€μ νλ‘ν νμ κ°μ μ°κ²°μ΄ ꡬμ±λλ©°, μ΄ μ°κ²°μ λ°λΌ νλ‘ν νμ 체μΈμ νκ³ μ¬λΌκ°λ©° μμ±κ³Ό λ©μλλ₯Ό νμνλ κ²μ΄ νλ‘ν νμ 체μ΄λμ λλ€.
νλ‘ν νμ κ³Ό μΌλ° κ°μ²΄μ§ν₯ μΈμ΄μ μ°¨μ΄λ?
νλ‘ν νμ κΈ°λ° μΈμ΄μ κ°μ²΄μ§ν₯ μΈμ΄λ λ€μν λΆλΆμμ μ°¨μ΄κ° μμ΅λλ€.
- κ°μ²΄ μμ± λ°©μ : νλ‘ν νμ κΈ°λ° μΈμ΄λ κΈ°μ‘΄ κ°μ²΄λ₯Ό 볡μ νμ¬ μ κ°μ²΄λ₯Ό μμ±νμ§λ§, μΌλ° κ°μ²΄μ§ν₯μ κ²½μ° ν΄λμ€λ₯Ό μ μν ν μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
- μμ λ°©μ : νλ‘ν νμ κΈ°λ° μΈμ΄λ νλ‘ν νμ 체μΈμ ν΅ν΄ μμλ°κ³ κ°μ²΄μ§ν₯ μΈμ΄λ ν΄λμ€ μμꡬ쑰μ λλ€.
this
Β λ°μΈλ© : νλ‘ν νμ κΈ°λ° μΈμ΄λ thisκ° νΈμΆνλ λ¬Έλ§₯μ λ°λΌ λμ μΌλ‘ κ²°μ λμ§λ§ κ°μ²΄μ§ν₯ μΈμ΄λ κ³ μ μ μΌλ‘ μΈμ€ν΄μ€ μμ μ κ°λ¦¬ν΅λλ€.
νλ‘ν νμ μ΄ μ‘΄μ¬νλλ°, μ μλ°μ€ν¬λ¦½νΈλ ν΄λμ€λ₯Ό λμ νμκΉμ?
μλ°μ€ν¬λ¦½νΈκ° ν΄λμ€λ₯Ό λμ ν μ¬λ¬ μ΄μ κ° μμ΅λλ€.
prototype
μ μ§μ λ€λ£¨λ λ°©μμ΄ μ΄λ ΅κ³ 볡μ‘νκΈ°μ λ¬Έλ²μ μ§κ΄μ±μ μ¬λ¦¬κ³ μμμ κ°κ²°ννκΈ° μν¨μ
λλ€.
μ΄λ₯Ό ν΅ν΄ μ½λ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ΄ ν₯μλμμ΅λλ€.
νμ§λ§ ν΄λμ€λ₯Ό λμ νλ€ νλλΌλ λ΄λΆ μλλ°©μμ νλ‘ν νμ μ μ¬μ©ν©λλ€. λ°λΌμ, μ¬μ©μμκ² νΈμμ±μ μ 곡νκΈ° μν λ¬Έλ²μ μ€νμ λλ€.
μ΅μμ 루νΈμ νλ‘ν νμ μ 무μμΈκ°μ?
μλ°μ€ν¬λ¦½νΈ νλ‘ν νμ 체μΈμ κ°μ₯ κΌλκΈ°, μ¦Β μ΅μμ λ£¨νΈ νλ‘ν νμ κ°μ²΄λΒ Object.prototypeΒ μ λλ€.
κ±°μ λͺ¨λ μλ°μ€ν¬λ¦½νΈ κ°μ²΄λ (μ§μ μ μ΄λ κ°μ μ μ΄λ ) μ΄Β Object.prototypeΒ κ°μ²΄λ₯Ό νλ‘ν νμ 체μΈμ μ΄λκ°μμ μμλ°κ² λ©λλ€. μλ₯Ό λ€μ΄ μ°λ¦¬κ°Β {} 리ν°λ΄λ‘ λ§λλ μΌλ° κ°μ²΄λ,Β new Array()λ‘ λ§λλ λ°°μ΄ κ°μ²΄, μ¬μ§μ΄ ν¨μ κ°μ²΄κΉμ§λ κ²°κ΅μλ μ΄Β Object.prototypeΒ μΌλ‘ μ°κ²°λ©λλ€.
Object.prototypeΒ μλΒ toString(),Β hasOwnProperty(),Β valueOf()Β μ κ°μ΄ λͺ¨λ κ°μ²΄κ° κΈ°λ³Έμ μΌλ‘ μ¬μ©ν μ μλ κ³΅ν΅ λ©μλλ€μ΄ μ μλμ΄ μμ΅λλ€.
κ·Έλ¦¬κ³ μ΄Β Object.prototypeΒ κ°μ²΄μ νλ‘ν νμ , μ¦Β Object.getPrototypeOf(Object.prototype)Β μ νμΈν΄λ³΄λ©΄Β nullΒ μ΄ λμ΅λλ€. μ΄Β nullΒ κ°μ΄ λ°λ‘ νλ‘ν νμ 체μΈμΒ μ’ μ°©μ μ μλ―Έν©λλ€. μ¬κΈ°μ λ μ΄μ μ¬λΌκ° κ³³μ΄ μλ€λ λ»μ΄μ£ .
μ΄λ²€νΈ λ²λΈλ§, μ΄λ²€νΈ μΊ‘μ³λ§, μ΄λ²€νΈ μ νμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μ΄λ²€νΈ μ νλ μΉ λΈλΌμ°μ μμ HTML μμμ μ΄λ²€νΈκ° λ°μνμ λ, κ·Έ μ΄λ²€νΈκ° DOM νΈλ¦¬λ₯Ό λ°λΌ μ΄λ»κ² μ λ¬λλμ§μ λν λ°©μμ λλ€.
μ΄λ²€νΈ λ²λΈλ§μ μ΄λ²€νΈκ° λ°μν νκ²μμ μμν΄ λΆλͺ¨ μμλ€μ κ±°μ³ μ΅μμ 루νΈκΉμ§ μ νλλ νμμ λλ€. λν κ΄λ ¨λ κ°λ μΌλ‘ μ΄λ²€νΈ μΊ‘μ³λ§κ³Ό μ΄λ²€νΈ μμμ΄ μμ΅λλ€.
μ΄λ²€νΈ μΊ‘μ³λ§μ μ΄λ²€νΈ λ²λΈλ§κ³Ό λ°λλ‘ μ΅μμ 루νΈμμ λ°μν μμκ° μ΄λ²€νΈκ° μ€μ λ‘ λ°μν νκ² μμκΉμ§ μλλ‘ μ΄λ²€νΈλ₯Ό μ λ¬ν΄ λ΄λ €κ°λ νμμ λ§ν©λλ€.
μ°λ¦¬κ° λ³΄ν΅ μ΄λ²€νΈ 리μ€λλ₯Ό μ¬μ©ν λ λ³λμ μ΅μ μ μ£Όμ§ μμΌλ©΄, μ΄λ²€νΈ 리μ€λλ μ΄ λ²λΈλ§ λ¨κ³μμ λμν©λλ€. μ΄ λ²λΈλ§ νΉμ± λλ¬Έμ μ΄λ²€νΈ μμ(event delegation)μ΄λΌλ κΈ°λ²μ μ¬μ©ν μ μμ΅λλ€.
μ΄λ²€νΈ μμμ μ΄λ²€νΈ λ²λΈλ§ κΈ°λ²μ μ¬μ©ν΄ μ¬λ¬ liλ€μ κ°κ° μ΄λ²€νΈλ₯Ό μμνλ κ²μ΄ μλ ulνκ·Έμ μ΄λ²€νΈλ₯Ό μμν΄ νμ μμλ€μμ μ΄λ²€νΈλ₯Ό λ°μν μ μλλ‘ νλ κΈ°λ²μ λλ€.
μ΄λ²€νΈ μ ν μ μ΄
stopPropagation
: μ΄λ²€νΈμ μ νλ₯Ό μ°¨λ¨νμ¬ λ²λΈλ§μ΄λ μΊ‘μ²λ§μ λ§μ μ μμ΅λλ€.
preventDefault
: μ΄λ²€νΈμ κΈ°λ³Έ λμμ μ·¨μν©λλ€. λ²λΈλ§μ΄λ μΊ‘μ²λ§μ λ§μ μ μμ΅λλ€.
event.targetκ³Ό event.currentTargetμ μ°¨μ΄
event.target
μ μ΄λ²€νΈκ° μ€μ λ‘ λ°μν DOM μμλ₯Ό κ°λ¦¬ν΅λλ€.
event.currentTarget
μ μ΄λ²€νΈ 리μ€λκ° μ€μ λ‘ λ±λ‘λ DOM μμλ₯Ό κ°λ¦¬ν΅λλ€.
λκΈ°(sync)μ λΉλκΈ°(async)μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
λκΈ° λ°©μμ μμ°¨μ μΌλ‘ μ½λκ° μ€νλλ λ°©μμ λλ€. μ¦, μ΄μ μμ μ΄ λλμΌ λ€μ μμ μ΄ μ€νλ©λλ€.
λΉλκΈ° λ°©μμ νΉμ μμ μ΄ λλ λκΉμ§ κΈ°λ€λ¦¬μ§ μκ³ , λ€μ μμ μ μ€ννλ λ°©μμ λλ€.
μ΄λ²€νΈ 루νμ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
μλ°μ€ν¬λ¦½νΈμ λΉλκΈ° μ²λ¦¬ 맀컀λμ¦μ κ΄λ¦¬νλ ν΅μ¬ κ΅¬μ± μμμ λλ€. μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λ κΈ°λ°μΌλ‘ λμνμ§λ§, λΉλκΈ° μμ μ μ²λ¦¬νκΈ° μν΄ μ΄λ²€νΈ 루νλ₯Ό ν΅ν΄ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν©λλ€.
- μ½ μ€νμ΄ λΉμ΄μλμ§ νμΈ
- λΉμ΄μμΌλ©΄ νμ€ν¬ νμ μλ μμ μ μ€νμΌλ‘ κ°μ Έμ μ€ν (λ§μ΄ν¬λ‘ νμ€ν¬ ν, λ§€ν¬λ‘ νμ€ν¬ νκ° μλλ° λ§μ΄ν¬λ‘ νμ€ν¬ νλ Promise, async/await λ±μ μ²λ¦¬νκ³ λ§€ν¬λ‘ νμ€ν¬ νλ setInterval, setTimeout λ±μ μ²λ¦¬ν©λλ€. λν λ§μ΄ν¬λ‘ νμ€ν¬ νκ° μ°μ μμκ° λ λμ΅λλ€.)
- μ΄λ₯Ό 무νν λ°λ³΅
+) μλ°μ€ν¬λ¦½νΈ μ체λ μ±κΈ μ€λ λλ‘ λμνκΈ° λλ¬Έμ ν λ²μ νλμ μμ λ§ μ²λ¦¬ν μ μμ΅λλ€. κ·Έλ°λ° λΉλκΈ° μμ μ΄ κ°λ₯ν μ΄μ λ μλ°μ€ν¬λ¦½νΈ μμ§μ λλ¬μΌ λ°νμ νκ²½(λΈλΌμ°μ λλ Node.js) λλΆμ λλ€.
μλ°μ€ν¬λ¦½νΈμμ λΉλκΈ° λ‘μ§μ΄ μ΄λ»κ² λμνλμ§ μ€λͺ ν΄μ£ΌμΈμ.
JSμμ λΉλκΈ° λμμ΄ κ°λ₯ν μ΄μ λ μλ°μ€ν¬λ¦½νΈμ μ΄λ²€νΈ 루νλλ¬Έμ λλ€.
μ΄λ²€νΈ 루νλ νΈμΆ μ€ν λ΄λΆμ μνν΄μΌ ν μμ μ΄ μλμ§ νμΈνκ³ , μνν΄μΌ ν μ½λκ° μλ€λ©΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μ΄μ©ν΄ μ€ννκ² ν©λλ€.
λν, νμ€ν¬ νμ λκΈ° μ€μΈ ν¨μκ° μλμ§ λ°λ³΅ν΄μ νμΈν©λλ€.
μ¬κΈ°μ μ€μν κ²μ λΉλκΈ° μμ μ λκ° μννλλμ λλ€. μ΄λ¬ν μμ μ λ©μΈμ€λ λκ° μλλΌ νμ€ν¬ νμ ν λΉλλ λ³λμ μ€λ λμμ μνλ©λλ€. μ΄ λ³λμ μ€λ λμμ νμ€ν¬ νμ μμ μ ν λΉν΄ μ²λ¦¬νλ κ²μ λΈλΌμ°μ λ Node.jsμ μν μ λλ€.
μ¦, μλ°μ€ν¬λ¦½νΈ μ½λ μ€νμ μ±κΈ μ€λ λμμ μ΄λ£¨μ΄μ§μ§λ§ μ΄λ¬ν μΈλΆ Web λ±μ λͺ¨λ μλ°μ€ν¬λ¦½νΈ μ½λ μΈλΆμμ μ€νλ©λλ€. μ΄λ₯Ό ν΅ν΄ μλ°μ€ν¬λ¦½νΈκ° λ©ν° μ€λ λλ₯Ό μ¬μ©νλ κ² μ²λΌλ³΄μ΄κ³ λΉλκΈ°κ° κ°λ₯ν©λλ€.
λ μμΈν μ΄λ²€νΈ 루ν λμ
μ΄λ²€νΈ 루νλ μ½μ€νμ λ¨Όμ νμΈν νμ λ§μ΄ν¬λ‘ νμ€ν¬ νλ₯Ό νμΈν©λλ€. λ§μ½ λ§μ΄ν¬λ‘ νμ€ν¬ νμλ λ°μ΄ν°κ° μλ€λ©΄ νμ€ν¬ νλ₯Ό λ§μ§λ§μΌλ‘ νμΈν©λλ€.
λν, λ λλ§μΒ λ§μ΄ν¬λ‘ νμ€ν¬ νκ° μ€νλλ©΄ μΌμ΄λκ² λ©λλ€.
λ°λΌμ λ§μ΄ν¬λ‘ νμ€ν¬ νλ₯Ό κ±°μΉκ³ λ λλ§μ κ±°μ³ νμ€ν¬ νλ₯Ό νμΈν©λλ€.
μ½λ°± ν¨μμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μ½λ°± ν¨μλ λ€λ₯Έ ν¨μμ μΈμλ‘ λ겨μ§λ ν¨μλ₯Ό μλ―Έν©λλ€.
μ¦, μ΄λ€ ν¨μκ° μ€νλ νμ νΈμΆλλ ν¨μλΌκ³ ν μ μμ΅λλ€.
μ½λ°± μ§μ₯μ ν΄κ²°νλ λ°©λ²μ μ€λͺ ν΄μ£ΌμΈμ
JavaScript μ½λμμ μ¬λ¬ λΉλκΈ° μμ μ΄ μμ°¨μ μΌλ‘ μνλμ΄μΌ ν λ, κ°κ°μ μμ μ΄ μλ£λ ν λ€μ μμ μ μννκΈ° μν΄ μ½λ°± λ΄λΆμ μ½λ°±μ μΆκ°ν΄μΌ νμ΅λλ€. μ΄λ‘ μΈν΄ μ½λκ° λ³΅μ‘ν΄μ§κ³ λλ²κΉ μ΄ μ΄λ €μμ‘μ΅λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ Promiseλ async/awaitμ μ¬μ©ν©λλ€.
Promise/then μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
Promiseλ μλ°μ€ν¬λ¦½νΈμμ λΉλκΈ° μμ μ μ²λ¦¬ν μ μκ² ν΄μ£Όλ κ°μ²΄μ λλ€. fulfilled, pending, rejected μΈκ°μ§μ μνλ₯Ό κ°μ§λλ€.
λΉλκΈ° μμ μ΄ μ±κ³΅μ μΌλ‘ μ²λ¦¬λμμ λ promise κ°μ²΄λ resolveλ₯Ό λ°ννκ² λκ³ , thenμ ν΅ν΄ μ½λ°±ν¨μλ₯Ό μ€νμν€λ λ°©μμΌλ‘ μλλ©λλ€.
μ½λ°±μ μ€μ²© λμ μ, then/catch 체μΈμ ν΅ν΄μ κ°λ μ± λμ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
async/await μ λν΄ μ€λͺ ν΄μ£ΌμΈμ.
async/awaitμ Promiseλ₯Ό κΈ°λ°μΌλ‘ ν λ¬Έλ²μΌλ‘, λΉλκΈ° μμ μ λκΈ° μ½λμ²λΌ μμ±ν μ μκ² ν΄μ£Όλ λ¬Έλ²μ λλ€.
.then 체μΈμ νΌν μ μμ΄ λ κ°λ μ±μ΄ μ’μ΅λλ€.
λν try/catch λ¬Έμ ν΅ν΄ λΉλκΈ° ν¨μ λ΄λΆμμ λ°μν μλ¬λ₯Ό λκΈ° μ½λμ²λΌ μ²λ¦¬ν μ μμ΄μ μλ¬ νΈλ€λ§λ ν¨μ¬ λͺ νν΄μ§λλ€.
Promise.all()κ³Ό Promise.race()μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ
Promise.all()
Promise.all()
μ μ¬λ¬ κ°μ νλ‘λ―Έμ€λ₯Ό λμμ μ€ννκ³ , λͺ¨λ νλ‘λ―Έμ€κ° μ±κ³΅μ μΌλ‘ μλ£λ λκΉμ§ κΈ°λ€λ¦° νμ νλμ κ²°κ³Ό λ°°μ΄μ λ°νν©λλ€.- λͺ¨λ νλ‘λ―Έμ€κ° μ±κ³΅νλ©΄, λ°°μ΄μ μμλ κ° νλ‘λ―Έμ€κ° μμλ μμλλ‘ κ²°κ³Όκ° λ€μ΄κ°λλ€.
- νλμ νλ‘λ―Έμ€λΌλ μ€ν¨νλ©΄,
Promise.all()
μ ν΄λΉ μ€ν¨ νλ‘λ―Έμ€μ μλ¬λ₯Ό λ°ννλ©° μ¦μ μ€λ¨λ©λλ€.
Promise.race()
Promise.race()
λ μ¬λ¬ κ°μ νλ‘λ―Έμ€ μ€ κ°μ₯ λ¨Όμ μλ£λ νλμ νλ‘λ―Έμ€λ§μ λ°νν©λλ€.- μ¦, κ°μ₯ λ¨Όμ μ±κ³΅ λλ μ€ν¨ν νλ‘λ―Έμ€μ κ²°κ³Όλ μλ¬λ₯Ό λ°ννλ©°, λ€λ₯Έ νλ‘λ―Έμ€λ€μ 무μλ©λλ€.
Babelκ³Ό κ°μ νΈλμ€νμΌλ¬(Transpiler)μ μν μ 무μμΈκ°μ? μ νλ νλ‘ νΈμλ κ°λ°μμ νμνκ°μ?
λ°λ²¨μ ν΅μ¬ μν μ μ΅μ λ²μ μ μλ°μ€ν¬λ¦½νΈ(ES6, ESNext λ±) λ¬Έλ²μΌλ‘ μμ±λ μ½λλ₯Ό ꡬν λΈλΌμ°μ μμλ λ¬Έμ μμ΄ λμν μ μλλ‘ μ΄μ λ²μ μ μλ°μ€ν¬λ¦½νΈ(μ£Όλ‘ ES5) λ¬Έλ²μΌλ‘ λ³νν΄μ£Όλ κ²μ λλ€.
λ°λ²¨μ μ΅μ μλ°μ€ν¬λ¦½νΈ κΈ°μ μ μ¬μ©νλ €λ κ°λ°μμ μꡬμ λ€μν λΈλΌμ°μ νκ²½μ μ§μν΄μΌ νλ νμ€ μ¬μ΄μΒ κ°κ·Ήμ λ©μμ£Όλ νμμ μΈ λꡬλΌκ³ ν μ μμ΅λλ€. λλΆμ λ λμ μ½λλ‘ λ λ§μ μ¬μ©μμκ² μμ μ μΈ μλΉμ€λ₯Ό μ 곡ν μ μκ² λ©λλ€.
μΉν©(Webpack), Viteμ κ°μ λͺ¨λ λ²λ€λ¬(Module Bundler)λ μ νμνλ©°, μ£Όμ κΈ°λ₯μ 무μμΈκ°μ?
λͺ¨λ λ²λ€λ¬λ μ¬λ¬ κ°λ‘ λλμ΄μ§ μ½λ νμΌ(μλ°μ€ν¬λ¦½νΈ λͺ¨λλΏλ§ μλλΌ CSS, μ΄λ―Έμ§ λ± λ€λ₯Έ 리μμ€ ν¬ν¨)κ³Ό κ·Έ μμ‘΄μ±μ λΆμν΄μ, λΈλΌμ°μ κ° ν¨μ¨μ μΌλ‘ λ‘λνκ³ μ€νν μ μλλ‘ νλ λλ λͺ κ°μ μ΅μ νλ λ²λ€λ‘ λ¬Άμ΄μ£Όλ μν μ ν©λλ€.
Babelμ ν΅ν νΈλμ€νμΌλ§, μ½λ μμΆκ³Ό νΈλ¦¬ μμ΄νΉμ ν΅ν μ΅μ ν, HMRμ ν΅ν κ°λ° μμ°μ± ν₯μκ³Ό κ°μ κΈ°λ₯μ ν΅ν΄ νλ νλ‘ νΈμλ κ°λ°μ νμμ μΈ λκ΅¬λ‘ μ리μ‘κ³ μμ΅λλ€.
require vs import λ₯Ό λΉκ΅ν΄μ μ€λͺ ν΄μ£ΌμΈμ.
requireλ λμ λͺ¨λλ‘ μ€νλλ μκ°μ λ°λ‘ λΆλ¬μ€κ² λλ©°
importλ μ μ λͺ¨λλ‘ λΉλ νμμ λΆμλλ©° νΈλ¦¬μ °μ΄νΉμ΄ κ°λ₯ν΄ μ΅μ νμ μ 리ν©λλ€.
νμ΄ν ν¨μμ μΌλ° ν¨μμ μ°¨μ΄
νμ΄ν ν¨μλ μΌλ° ν¨μμ λͺκ°μ§ λ€λ₯Έ μ μ΄ μμ΅λλ€.
κ°μ₯ ν΅μ¬μ μΈ μ°¨μ΄λ this
μ μ²λ¦¬ λ°©μμ
λλ€. μΌλ° ν¨μλ νΈμΆ μμ μμ this
μ κ°μ΄ κ²°μ λλ λ°λ©΄, νμ΄ν ν¨μλ μμ μ κ°μΈλ μΈλΆ μ€μ½ν(μμ μ€μ½ν)μ this
κ°μ κ·Έλλ‘ λ¬Όλ €λ°κ³ κ³ μ μν€κΈ° λλ¬Έμ νλ² μ ν΄μ§κ³ λλ©΄ λ°λμ§ μμ΅λλ€.
λ λ²μ§Έλ‘ νμ΄ν ν¨μκ° λΉκ΅μ κ°κ²°ν λ¬Έλ²μ μ 곡ν©λλ€.
μΈ λ²μ§Έλ‘ νμ΄ν ν¨μλ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μμ΅λλ€. prototype
νλ‘νΌν°λ μκ³ νλ‘ν νμ
λ μμ±νμ§ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ ν¨μ μ체μ this
, arguments
, super
, new.target
λ°μΈλ©μ κ°μ§ μμ΅λλ€. λ°λΌμ, ν¨μ λ΄λΆμμ μμ λ΄μ©μ μ°Έμ‘°νλ©΄ μμ μ€μ½νμ λ΄μ©μ μ°Έμ‘°ν©λλ€. μ¦, λ°μΈλ©μ μμ μ€μ½νμ κ³ μ μν΅λλ€.
ν¨μ μ μΈνκ³Ό ν¨μ ννμμ μ°¨μ΄
ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμμ νΈμ΄μ€ν μμ μ°¨μ΄κ° λ©λλ€.
ν¨μ μ μΈλ¬Έμ κ²½μ° νΈμ΄μ€ν μ΄ λ°μνμ¬ μ€μ μ½λ λΌμΈ μ΄μ μ νΈμΆνμ¬λ μ μμ μΈ κ°μ λ°ννλ λ°λ©΄, ν¨μ ννμμ κ²½μ°λ μ€μ μ½λ λΌμΈ μ΄μ μ νΈμΆνλ©΄ μλ¬λ₯Ό λ°νν©λλ€.
μ¦μ μ€ν ν¨μ(IIFE)μ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μ¦μ μ€ν ν¨μλ λ§ κ·Έλλ‘ ν¨μλ₯Ό μ μνκ³ κ·Έ μκ° μ¦μ μ€νλλ ν¨μμ λλ€. λ¨ ν λ²λ§ νΈμΆλκ³ , λ€μ νΈμΆν μ μμ΅λλ€.
μ¦μ μ€ν ν¨μ λ΄λΆμμ μ μΈλ λ³μλ μΈλΆ μ€μ½νμ μν₯μ λ°μ§ μμ λ°μ΄ν°λ₯Ό 보νΈνκ³ μλμ΄ κ°λ₯ν©λλ€. λν, ν λ² μ€νλλ©΄ λ©λͺ¨λ¦¬κ° λ¨μ§ μμ μΌμμ μΈ λ°μ΄ν° μ²λ¦¬μ μ ν©ν©λλ€.
컀λ§(Currying)μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
컀λ§μ μ¬λ¬ κ°μ μΈμλ₯Ό λ°λ ν¨μλ₯Ό, νλμ μΈμλ§ λ°λ μ¬λ¬ κ°μ ν¨μλ‘ μμ°¨μ μΌλ‘ μͺΌκ°λ ν¨μ λ³ν κΈ°λ²μ λλ€.
ν¨μλ₯Ό νΈμΆν λ λͺ¨λ μΈμλ₯Ό ν λ²μ λ€ λκ²¨μΌ νλ λμ , μΈμλ₯Ό νλμ© νΉμ λΆλΆμ μΌλ‘ λκΈΈ μ μκ² λ§λλ κ±°μ£ .
μλ₯Ό λ€μ΄, λ μ«μλ₯Ό λνλ add(a, b) λΌλ ν¨μκ° μλ€λ©΄, μ΄κ±Έ 컀λ§νλ©΄ curriedAdd(a) μ²λΌ 첫 λ²μ§Έ μΈμλ§ λ°λ ν¨μλ₯Ό λ¨Όμ νΈμΆνκ³ , μ΄ ν¨μκ° λ°ννλ λ λ€λ₯Έ ν¨μμ λ λ²μ§Έ μΈμ bλ₯Ό λ겨μ curriedAdd(a)(b) μ κ°μ ννλ‘ μ΅μ’ κ²°κ³Όλ₯Ό μ»λ λ°©μμΌλ‘ λ§λ€ μ μμ΅λλ€.
컀λ§μ μ¬μ©νλ©΄ ν¨μμΒ μ¬μ¬μ©μ±μ λμΌ μ μλ€λ μ₯μ μ΄ μμ΅λλ€.
ES6μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
ES6λ ECMAScript 2015μ λ€λ₯Έ μ΄λ¦μΌλ‘, μλ°μ€ν¬λ¦½νΈ μΈμ΄μ μμ£Ό ν° λ³νμ΄μ μ€μν μ λ°μ΄νΈ λ²μ μ΄λΌκ³ μκ°ν©λλ€.
letκ³Ό constμ λμ λΆν°, νμ΄ν ν¨μ λ° λͺ¨λ μμ€ν λ±μ΄ μΆκ°λμ΄ μλ°μ€ν¬λ¦½νΈλ₯Ό κ°λ ₯νκ³ , μ μ§λ³΄μνκΈ° μ¬μ΄ μΈμ΄λ‘ λ§λ€μ΄ μ£Όμμ΅λλ€.
Rest μ°μ°μμ Spread μ°μ°μμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
Rest μ°μ°μλ μ¬λ¬ κ°μ μΈμλ₯Ό νλλ‘ λ°μ λ μ¬μ©λ©λλ€. μ¦, μ¬λ¬κ°μ κ°μ νλμ λ°°μ΄λ‘ λͺ¨μμ€λλ€.
Spread μ°μ°μλ λ°°μ΄μ΄λ κ°μ²΄μ μμλ₯Ό νΌμΉ λ μ¬μ©λ©λλ€.
**μ΅μ λ 체μ΄λ(Optional Chaining)Β `?.`Β κ³Ό Nullish CoalescingΒ `??`Β μ°μ°μλ 무μμ΄λ©°, μ΄λ€ μν©μμ μ μ©νκ² μ¬μ©λ μ μλμ?**
μ΅μ λ 체μ΄λ (Optional Chaining, ?.)
κ°μ²΄μ μμ±μ΄λ λ©μλ, λλ λ°°μ΄μ μμμ μ κ·Όν λ, μ κ·Όνλ €λ λμμ μλΆλΆ(.Β μ΄λΒ [Β λ°λ‘ μ)μ΄Β nullΒ μ΄λΒ undefinedΒ μΈμ§ λ¨Όμ νμΈν©λλ€. λ§μ½ κ·Έλ λ€λ©΄, μλ¬λ₯Ό λ°μμν€λ λμ Β μ¦μ νκ°λ₯Ό λ©μΆκ³ Β undefinedλ₯Ό λ°νν©λλ€.
κΉμνκ² μ€μ²©λ κ°μ²΄ ꡬ쑰μμ νΉμ μμ±μ μ κ·Όν΄μΌ ν λ μμ£Ό μ μ©ν©λλ€. μλ₯Ό λ€μ΄ user.profile.address.street μ²λΌ κΉμμ΄ λ€μ΄κ°μΌ νλλ°, μ€κ°μ user, profile, address μ€ μ΄λ νλλΌλ nullμ΄λ undefinedμΌ κ°λ₯μ±μ΄ μλ€λ©΄ μμ μλ ifλ¬Έμ΄λ && μ°μ°μλ‘ κΈΈκ² μ²΄ν¬ν΄μΌ νμ΅λλ€. μ΅μ λ 체μ΄λμ μ°λ©΄ user?.profile?.address?.street μ΄λ κ² ν μ€λ‘ μμ νκ² μ²λ¦¬ν μ μμ΅λλ€
Nullish λ³ν© μ°μ°μ (Nullish Coalescing Operator, ??)
μΌμͺ½ νΌμ°μ°μκ°Β nullΒ λλΒ undefinedΒ μΌ λλ§ μ€λ₯Έμͺ½ νΌμ°μ°μλ₯Ό λ°ννκ³ , κ·Έ μΈμ λͺ¨λ κ²½μ°μλ μΌμͺ½ νΌμ°μ°μ κ°μ κ·Έλλ‘ λ°νν©λλ€.
λ³μμ κΈ°λ³Έκ°μ μ€μ ν΄μ€ λ μμ£Ό μ μ©ν©λλ€. κΈ°μ‘΄μλ λ Όλ¦¬ OR μ°μ°μ(||)λ₯Ό λ§μ΄ μ¬μ©νλλ°, ||λ μΌμͺ½ κ°μ΄ 'falsy'ν κ°(μ: 0, ''(λΉ λ¬Έμμ΄), false, NaN)μ΄λ©΄ 무쑰건 μ€λ₯Έμͺ½ κ°μ λ°ννλ λ¬Έμ κ° μμ΄μ μ΄λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
JSμ Array.flat()μ μ΄λ»κ² ꡬνν΄λ³Ό μ μμκΉμ?
flat()μ μ€μ²©λ λ°°μ΄μ μ§μ λ κΉμ΄(depth)κΉμ§ ννννμ¬ μλ‘μ΄ λ°°μ΄μ λ°ννλ μν μ νμ£ . κ°μ₯ μ§κ΄μ μΈ λ°©λ²μ μ¬κ·λ₯Ό μ΄μ©νλ κ²μ λλ€.
- μλ‘μ΄ λΉ λ°°μ΄Β resultλ₯Ό λ§λλλ€. (μλ³Έ λ°°μ΄ λΆλ³μ± μ μ§)
- μ λ ₯ λ°°μ΄Β arrμ κ° μμΒ elementλ₯Ό μνν©λλ€.
- elementκ° λ°°μ΄μ΄κ³ Β depthκ° 0λ³΄λ€ ν¬λ©΄,Β elementμ λν΄Β customFlatμ μ¬κ·μ μΌλ‘ νΈμΆνκ³ (depthλ 1 κ°μ), κ·Έ κ²°κ³Όλ₯ΌΒ resultμ νΌμ³μ μΆκ°ν©λλ€.
- elementκ° λ°°μ΄μ΄ μλκ±°λΒ depthκ° 0μ΄λ©΄,Β elementλ₯Ό κ·Έλλ‘Β resultμ μΆκ°ν©λλ€.
- λͺ¨λ μμ μνκ° λλλ©΄Β resultΒ λ°°μ΄μ λ°νν©λλ€.
λΆλ³μ±μ μ μ§νλ €λ©΄ μ΄λ»κ² ν΄μΌνλμ?
λΆλ³μ±μ λ°μ΄ν°(μ£Όλ‘ κ°μ²΄λ λ°°μ΄)κ° μμ±λ νμ κ·Έ μνλ₯Ό λ³κ²½νμ§ μλ κ²μ μλ―Έν©λλ€. λ§μ½ λ³κ²½μ΄ νμνλ€λ©΄, μλ³Έμ μμ νλ λμ λ³κ²½ μ¬νμ΄ μ μ©λ μλ‘μ΄ κ°μ²΄λ λ°°μ΄μ λ§λλ λ°©μμΌλ‘ μ κ·Όν©λλ€.
λΆλ³μ±μ μ μ§νκΈ° μν λͺκ°μ§ λ°©λ²μ΄ μμ΅λλ€.
첫 λ²μ§Έλ‘, μλ°μ€ν¬λ¦½νΈμμ μμ νμ μ κ²½μ° κ·Έ μμ²΄λ‘ λΆλ³μ±μ κ°κ³ μμΌλ―λ‘ μμνμ μΌλ‘ κ°μ ν λΉν©λλ€.
λ λ²μ§Έλ‘,Β κ°λ³μ μΈ λ°μ΄ν°μΈ λ°°μ΄κ³Ό κ°μ²΄λ μλ‘μ΄ λ°°μ΄, κ°μ²΄λ₯Ό μμ±νλ λ°©μμΌλ‘ μ κ·Όν©λλ€. νΉμ, Object.freeze()
λ₯Ό νμ©νμ¬ κ°μ²΄λ₯Ό λΆλ³νκ² λ§λ€ μ μμ΅λλ€.
requestAnimationFrameμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
μλ°μ€ν¬λ¦½νΈμμ μ λλ©μ΄μ μ μ²λ¦¬ν λ μ¬μ©λλ©°, λΆλλ¬μ΄ μ λλ©μ΄μ μ ꡬνν λ μ¬μ©ν©λλ€.
λΈλΌμ°μ μ λμ€νλ μ΄ λ¦¬νλ μ μ£ΌκΈ°(1μ΄μ 60λ², 60Hz)μ λ§κ² λκΈ°νλμ΄ νΈμΆλ©λλ€. μ΄λ λ§€ νλ μλ§λ€ ν λ²μ© μ€ννκ² λμ΄ λ§€λλ½κ³ λΆλλ¬μ΄ μ λλ©μ΄μ μ μ 곡ν©λλ€.
λν, λΈλΌμ°μ λ νλ©΄μ΄ λ¦¬νλ μλ λλ§ μ λλ©μ΄μ μ μ€νν©λλ€. κ·Έλμ μ¬μ©μκ° λ€λ₯Έ νμΌλ‘ μ ννκ±°λ, νμ΄μ§κ° λ°±κ·ΈλΌμ΄λμ μμ κ²½μ° λΆνμν μ λλ©μ΄μ μ΄ μ€νλμ§ μμΌλ©°, μ΄λ‘ μΈν΄ λΆνμν CPU 리μμ€λ₯Ό μ μ½ν μ μμ΅λλ€.
**μ½λ μ€ν리ν (Code Splitting)κ³Ό μ§μ° λ‘λ©(Lazy Loading)μ 무μμ΄λ©°, μΉ μ±λ₯ μ΅μ νμ μ΄λ»κ² κΈ°μ¬νλμ?**
μ½λ μ€ν리ν (Code Splitting)
- 무μμΈκ°μ?Β λ§ κ·Έλλ‘Β μ½λ(μ£Όλ‘ μλ°μ€ν¬λ¦½νΈ λ²λ€)λ₯Ό μ¬λ¬ κ°μ μμ μ‘°κ°(chunk)μΌλ‘ λλλ κ²μ μλ―Έν©λλ€. μΉν©(Webpack), Vite, Rollup κ°μ λͺ¨λ λ²λ€λ¬κ° μ 곡νλ μ£Όμ κΈ°λ₯ μ€ νλμ λλ€.
- μ νμνκ°μ?Β νλ μΉ μ ν리μΌμ΄μ μ κΈ°λ₯μ΄ λ§μμ§λ©΄μ μλ°μ€ν¬λ¦½νΈ λ²λ€ νμΌμ ν¬κΈ°κ° λ§€μ° μ»€μ§λ κ²½ν₯μ΄ μμ΅λλ€. μ΄ ν° νμΌμ ν λ²μ λ€ λ‘λνλ €κ³ νλ©΄ μ΄κΈ° λ‘λ© μκ°μ΄ κΈΈμ΄μ Έμ μ¬μ©μ κ²½νμ΄ λλΉ μ§λλ€. μ½λ μ€ν리ν μ μ΄ ν° λ²λ€μ μ¬λ¬ κ°μ μμ νμΌλ‘ λΆλ¦¬ν΄μ,Β μ²μμλ κΌ νμν μ΅μνμ μ½λλ§ λ‘λνκ³ λλ¨Έμ§λ νμν λ λ‘λνλλ‘ λ§λλ κΈ°λ°μ μ 곡ν©λλ€.
μ§μ° λ‘λ© (Lazy Loading)
- 무μμΈκ°μ? 리μμ€λ₯Ό λΉμ₯ νμνμ§ μμΌλ©΄ λ‘λνμ§ μκ³ , μ€μ λ‘ νμν μμ μ λ‘λνλ κΈ°λ²μ λλ€. μ¬κΈ°μ 리μμ€λ μ½λ μ€ν리ν μΌλ‘ λλ μ§ μλ°μ€ν¬λ¦½νΈ μ²ν¬ νμΌμΌ μλ μκ³ , μ΄λ―Έμ§λ μ»΄ν¬λνΈ λ± λ€λ₯Έ μμμΌ μλ μμ΅λλ€.
- μ νμνκ°μ?Β μΉ νμ΄μ§λ₯Ό μ²μ μ΄ λ μ¬μ©μκ° μ¦μ 보거λ μ¬μ©νμ§ μμ λͺ¨λ κ²μ 미리 λ‘λνλ κ²μ λΉν¨μ¨μ μ λλ€. μλ₯Ό λ€μ΄, νμ΄μ§ νλ¨μ μλ μ΄λ―Έμ§λ, νΉμ λ²νΌμ ν΄λ¦ν΄μΌλ§ 보μ΄λ λͺ¨λ¬ μ°½μ μ½λλ μ¬μ©μκ° ν΄λΉ μμμ λλ¬νκ±°λ λ²νΌμ λλ₯΄κΈ° μ κΉμ§λ νμ μμ μ μμ΅λλ€. μ§μ° λ‘λ©μ ν΅ν΄ μ΄λ°Β λΉν΅μ¬μ μΈ(non-critical) 리μμ€μ λ‘λ©μ λ€λ‘ 미루면 μ΄κΈ° λ‘λ© μλλ₯Ό ν¬κ² κ°μ ν μ μμ΅λλ€.
λλ°μ΄μ€, μ°λ‘νλ§μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ.
λ κ° λͺ¨λ, ν¨μ μ€ν νμλ₯Ό μ‘°μ νμ¬ μ±λ₯μ μ΅μ ννλ λ°©λ²μ λλ€.
- λλ°μ΄μ€
- ν΅μ¬: μ§§μ μκ° λ΄ μ°μλλ μ΄λ²€νΈλ₯Ό λ§μ§λ§μ νλλ‘ μ²λ¦¬νλ κ².
- μ΄λ²€νΈκ° μ°μνμ¬ λ°μνλ κ²½μ°, λ§μ§λ§ μ΄λ²€νΈκ° λ°μ ν μΌμ μκ°λμ μΆκ° μ΄λ²€νΈκ° μμ μ βν λ²λ§β ν¨μλ₯Ό μ€νμν€λ λ°©μμ λλ€. μ°λ¬μμ μ΄λ²€νΈκ° λ€μ΄μ€λ κ²½μ° νμ΄λ¨Έλ₯Ό 리μ ν©λλ€.
- ex1) κ²μμ°½ μλ μμ± μ, 'γΉ', '리', '리γ ', '리μ ', '리μ‘', '리μ‘γ β μ΄λ κ² μΉ λλ§λ€ API μμ²μ΄ λ°μνλ μν© λ°©μ§
- ex2) μ°½ ν¬κΈ° μ‘°μ μ μν΄ λλκ·Έλ₯Ό νλ κ²½μ°μ, μ μ κ° λλκ·Έλ₯Ό λ©μΆκ³ μ΅μ’ ν¬κΈ°λ‘ ν λ²λ§ κ³μ°ν μ
- μ°λ‘νλ§
- ν΅μ¬: μΌμ μκ° κ°κ²©μΌλ‘ μ€ν νμλ₯Ό μ ν.
- μ΄λ²€νΈκ° μ°μνμ¬ λ°μνλ κ²½μ°, μ ν΄μ§ μκ° κ°κ²©λμ βμ΅λ ν λ²βλ§ ν¨μλ₯Ό μ€νμν΅λλ€. λ§μ½ μ°λ‘νλ§ μ£ΌκΈ°λ₯Ό 1μ΄λ‘ μ€μ ν κ²½μ°, 1μ΄μ μ΄λ²€νΈκ° 100λ² λ°μν΄λ, νΈλ€λ¬λ λ¨ ν λ²λ§ μ€νλ©λλ€.
- ex1) μ€ν¬λ‘€ μμΉλ₯Ό κ³μ°νμ¬ μ λλ©μ΄μ ν¨κ³Όλ₯Ό μ£Όλ κ²½μ°, μμ£Ό μ€ν λ μ λ²λ² μ΄κΈ° λλ¬Έμ 100msμ ν λ²μΌλ‘ μ ν.
- ex2) μ¬μ©μκ° API νΈμΆμ νλ λ²νΌμ μ°ννλλΌλ μλ² λΆνλ₯Ό μμ£Όλλ‘ μμ² κ°κ²©μ μ ν
AJAXμ λν΄ μ€λͺ ν΄μ£ΌμΈμ
AJAXλ JavaScriptλ₯Ό μ¬μ©νμ¬ λΉλκΈ°μ μΌλ‘ λ°μ΄ν°λ₯Ό μμ²νκ³ μλ²μμ λ°μ μλ΅μ μ²λ¦¬νλ λ°©μμ λλ€. μ¬κΈ°μ μ€μν μ μ νμ΄μ§ μ 체λ₯Ό μλ‘κ³ μΉ¨ νμ§ μκ³ , νμν λ°μ΄ν°λ§μ μ λ°μ΄νΈνλ€λ κ²μ λλ€.
fetch API
λ₯Ό ν΅ν΄ μ¬μ©ν μ μμ΅λλ€.
μ ν¨μ μ€νμ StackμΌλ‘ κ΄λ¦¬νλμ?
κ°μ₯ ν° μ΄μ λ ν¨μμΒ νΈμΆ λ°©μμ΄ μ€νμ λμ λ°©μμΈ 'νμ μ μΆ(LIFO, Last-In First-Out)'κ³Ό μμ£Ό μ λ§κΈ° λλ¬Έμ λλ€.
μκ°ν΄λ³΄μλ©΄, ν¨μκ° λ€λ₯Έ ν¨μλ₯Ό νΈμΆνλ©΄, μλ ν¨μλ μ μ λ©μΆκ³ μλ‘ νΈμΆλ ν¨μκ° μ€νλμμμ? κ·Έλ¦¬κ³ μλ‘ νΈμΆλ ν¨μκ° λλμΌ μλ ν¨μλ‘ λμμμ λ¨μ μμ μ μ΄μ΄κ°μ£ . λ§μ½ κ·Έ μλ‘ νΈμΆλ ν¨μκ° λ λ€λ₯Έ ν¨μλ₯Ό νΈμΆνλ€λ©΄, κ·Έ νΈμΆ κ³Όμ μ΄ κ³μ μ€μ²©λ©λλ€.
μ½ μ€νμ λ°λ‘ μ΄λ° μμλ₯Ό κ΄λ¦¬νκΈ°μ λ± μ’μ μλ£κ΅¬μ‘°μ λλ€.