TIL 14: JS ν΅μ¬ κ°λ κ³Ό μ£Όμ λ¬Έλ²
μμ μλ£νκ³Ό μ°Έμ‘° μλ£ν
μμ μλ£νμ λ³μμλ νλμ μμ μλ£νλ§ λ΄μ μ μμ΅λλ€.
λ°λΌμ μμ μλ£νμ΄ λ΄κΈ°λ 보κ΄ν¨μ ν¬κΈ°λ κ³ μ λμ΄ μμ΅λλ€.
μ΄λ¬ν λ°μ΄ν° 보κ΄ν¨μ stackμ΄λΌκ³ λΆλ¦ λλ€.
μμ μλ£νμλ string, number, bigint, boolean, undefined, symbol, null μ΄ μμ΅λλ€.
λ°λ©΄ μ°Έμ‘° μλ£νμ λ³μμ ν λΉ ν λλ λ³μμ κ°μ΄ μλ μ£Όμλ₯Ό μ μ₯ν©λλ€.
μ΄ μ£Όμλ₯Ό λ°λΌκ°λ©΄ μμ μλ£νκ³Ό λ¬λ¦¬ ν¬κΈ°κ° λ³λ κ°λ₯ν λ°μ΄ν° 보κ΄ν¨μ΄ μμ΅λλ€.
μ΄λ¬ν λ°μ΄ν° 보κ΄ν¨μ heapμ΄λΌκ³ λΆλ¦ λλ€.
κ°λ¨νκ² μ 리νλ©΄ 'μμ μλ£νμ κ°μ μ μ₯νκ³ , μ°Έμ‘° μλ£νμ μ£Όμλ₯Ό μ μ₯νλ€'λ‘ μ 리ν μ μλλ°μ.
μ΄λ¬ν νΉμ± λλ¬Έμ λ³μ aκ° λ³μ bμ ν λΉνλ κ²½μ°κ° μ°¨μ΄κ° λνλ©λλ€.
μμ μλ£νμ κ²½μ° μλμ κ°μ΄ μ½λκ° μ€νλ λ aμ κ°μ μ¬μ ν 3μΌλ‘ μ μ§λ©λλ€.
let a = 3;
let b = a;
b = 7;
λ°λ©΄, μ°Έκ³ μλ£νμ κ²½μ° μλ μ½λκ° μ€νλλ©΄ aμ κ°μ bκ° λ°λλλ‘ λ°λκ² λ©λλ€.
let dessert = {iceCream: 'MintChocolate'};
let cold = dessert;
cold.iceCream = 'Strawberry';
λν cold λΌλ λ°°μ΄μ undefinedκ° ν λΉλλ©΄, λμ΄μ dessert λ°°μ΄μ μ κ·Όν μ μκ² λ©λλ€.
μ€μ½ν (Scope)
λ²μ(Scope)λ λ²μκ° μ€κ΄νΈ(λΈλ‘) λλ ν¨μμ μν΄ λλμ΄ μ§λλ€.
μμͺ½ μ€μ½νμμ λ°κΉ₯μͺ½ μ€μ½νλ‘λ μ κ·Όν μ μμ§λ§ λ°λλ λΆκ°λ₯ν©λλ€.
λν, μ€μ½νλ μ€μ²©μ΄ κ°λ₯ν©λλ€.
κ°μ₯ λ°κΉ₯μͺ½μ μ€μ½νλ μ μ μ€μ½ν(Global Scope)λΌκ³ λΆλ¦ λλ€.
μ μμ΄ μλ μ€μ½νλ λͺ¨λ μ§μ μ€μ½ν(Local Scope)μ λλ€.
λν μ§μ λ³μλ μ μ λ³μλ³΄λ€ λ λμ μ°μ μμλ₯Ό κ°μ§λλ€.
λ§μ½ λ°κΉ₯ λ³μκ° μμͺ½ λ³μκ° λμΌνλ€λ©΄, λ°κΉ₯μͺ½ λ³μκ° μμͺ½ λ³μμ μν΄ κ°λ €μ§λ νμμ μλμ(variable shadowing)μ΄λΌκ³ ν©λλ€.
μ€μ½νμλ λκ°μ§ μ’ λ₯κ° μμ΅λλ€.
νλλ λΈλ‘ μ€μ½ν(Block Scope)λ‘ μ€κ΄νΈ κΈ°μ€μΌλ‘ λ²μκ° κ΅¬λΆλ©λλ€.
λ€λ₯Έ μ€μ½νλ ν¨μ μ€μ½ν(Function Scope)κ° μμ΅λλ€.
ν¨μ μ μΈμ λ° ν¨μ ννμμΌλ‘ λ²μκ° λλμ΄μ§λλ€.
νκ°μ§ μ£Όμν΄μΌν μ μ νμ΄ν ν¨μλ ν¨μ μ€μ½νκ° μλλΌ λΈλ‘ μ€μ½νμ λλ€.
λ³μ μ μΈ
μ€μ½νμ μ’ λ₯μ λ°λΌ λ³μλ₯Ό μ μνλ μΈ κ°μ§ λ°©λ²(let, const, var)μ΄ λ€λ₯΄κ² μ μ©λ μ μμ΅λλ€.
varμ λΈλ‘ μ€μ½νλ₯Ό 무μνκ³ ν¨μ μ€μ½νλ§ λ°λ¦ λλ€.
λ¨, νμ΄ν ν¨μμ λΈλ‘ μ€μ½νλ 무μνμ§ μμ΅λλ€.
μλλ λ³μ μ μ λ°©λ²μ μ 리ν νμ λλ€.
let | const | var | |
μ ν¨ λ²μ | λΈλ‘ μ€μ½ν λ° ν¨μ μ€μ½ν | λΈλ‘ μ€μ½ν λ° ν¨μ μ€μ½ν | ν¨μ μ€μ½ν |
κ° μ¬ν λΉ | κ°λ₯ | λΆκ°λ₯ | κ°λ₯ |
μ¬μ μΈ | λΆκ°λ₯ | λΆκ°λ₯ | κ°λ₯ |
λ³μ μ μΈμμ μ£Όμν΄μΌ ν μ μ΄ μμ΅λλ€.
μ°Έκ³ λ‘ windowλ λΈλΌμ°μ μλ§ μ‘΄μ¬νλ κ°μ²΄λΌκ³ ν©λλ€.
λν μ μ μμμ λ΄κ³ μκΈ°λ ν©λλ€.
μ μ μμμ λ³μλ₯Ό μ μΈνλ©΄ μ΄λμλ μ κ·Όμ΄ κ°λ₯νμ§λ§, μ¬λ¬ μ¬λμ΄ κ°μ νλ‘κ·Έλ¨μ λ§λ€λ€λ³΄λ©΄ λ‘μ§μ λ¬Έμ κ° μκΈΈ μ μμ΅λλ€.
μ΄μ λνμ¬ μ μΈ μμ΄ λ³μλ₯Ό μ μΈνλ κ²½μ° varλ₯Ό μ¬μ©νλ κ²½μ°μ λΉμ·νκ² λκΈ° λλ¬Έμ, μ μλ³μλ₯Ό μ μΈν λΉνκ² λλ κ²μ΄κΈ°μ λ¬Έμ κ° μκΈΈ μ μμ΅λλ€.
μ΄λ° κ²½μ°λ₯Ό λ°©μ§νκΈ° μν΄ Strict Modeλ₯Ό μ μ©ν©λλ€.
jsνμΌ μλ¨μ 'use strict' λΌκ³ νννλ©΄ μ μ©μ΄ κ°λ₯ν©λλ€.
ν΄λ‘μ
ν΄λ‘μ ν¨μλ ν¨μλ₯Ό 리ν΄νλ ν¨μμ λλ€.
μΈν°λ·μ ν΄λ‘μ λ₯Ό μ°Ύμ보면 λ¬΄μ¨ μλ―ΈμΈμ§ μ ννκ² νμ νκΈ° μ’ μ΄λ ΅λλΌκ΅¬μ..!
κ·Έλμ μ κ° μκ°νλ ν΄λ‘μ ν¨μμ λν΄ μ’ λ μ¨λ³΄λ €κ³ ν©λλ€.
μμ²λΌ λ¨μν ν¨μλ₯Ό 리ν΄νλ ν¨μλΌκ³ λ§ νκΈ°μλ νκ³κ° μμ΅λλ€.
μ΄μ λν΄μλ λ¨Όμ ν΄λ‘μ μ μλ―Έμ λν΄ μμλ³΄κ² μ΅λλ€.
μΌλ¨ ν΄λ‘μ λΌκ³ νλ μ΄μ λ μ€μ½νλ₯Ό μ΄μ©ν΄μ λ³μκ° μ΄λκΉμ§ μ κ·Όν μ μλμ§ λ²μλ₯Ό μ ν΄μ£ΌκΈ° λλ¬Έμ λλ€.
λ λ€λ₯Έ λ§λ‘λ λ²μλ₯Ό λ«μμ€λ€κ³ ν μ μκ² μ£ . κ·Έλμ ClosureλΌκ³ μ°μ΄λ κ²λλ€.
μ°λ¦¬κ° μ΄μ μλ ν¨μ μμ λ³μλ ν¨μ μ€μ½νλ‘ μΈν΄ ν¨μ μμ μ°μ΄λ κ±Έ λ°°μ μ΅λλ€.
μ΄λ―Έ λλΆλΆμ κ°λ°μκ° μ΄λ¬ν μ¬μ€μ μκ³ μμμλ λΆκ΅¬νκ³ κ΅³μ΄ μ λ° μμΌλ‘ μ ν΄μ£Όλ μ΄μ λ λ°λ‘ λ΄λΆ ν¨μμμ μΈλΆ ν¨μμμ κ°μ Έμ¨ λ³μμ λ΄λΆ ν¨μμ λ³μλ₯Ό λ λ€ μ¬μ©νκ³ μκΈ° λλ¬Έμ΄λΌ μκ°ν©λλ€.
μμ λ§λ‘ νμ΄μ°λ 건 μ΄λ €μ΄ κ±° κ°μμ..γ γ γ γ γ