ν΄λ‘μ λ JS κ³ μ μ κ°λ μ΄ μλλ€.
ν¨μν νλ‘κ·Έλλ° μΈμ΄μμ μ¬μ©νλ μ€μν νΉμ§μ΄λ€.
κ³ μ μ κ°λ μ΄ μλκΈ° λλ¬Έμ ECMAScript μ¬μμ λ±μ₯νμ§ μλλ€.
MDN μμλ μλμ κ°μ΄ μ€λͺ νλ€.
ν΄λ‘μ λ ν¨μμ ν¨μκ° μ μΈλ λ μ컬 νκ²½κ³Όμ μ‘°ν©μ΄λ€.
μ¬κΈ°μ κΈ°μ΅ν΄μΌ ν ν€μλλ : "ν¨μκ° μ μΈλ λ μ컬 νκ²½" μ΄λ€.
function out() {
const x = 10;
function inner() {
console.log(x); //10
}
inner();
}
out();
μ€μ²©ν¨μ λ΄λΆμμ, μμ μ ν¬ν¨νκ³ μλ μΈλΆ ν¨μμ λ³μμ μ κ·Όν μ μλ€.
λ§μ½ inner ν¨μκ° out ν¨μμ λ΄λΆμμ μ μλ μ€μ²©ν¨μκ° μλλΌλ©΄,
inner ν¨μλ₯Ό out ν¨μ λ΄λΆμμ νΈμΆνλ€ νλλΌλ, out ν¨μμ λ³μμ μ κ·Όν μ μλ€.
=> μ΄μ : JS κ° λ μ컬 μ€μ½νλ₯Ό λ°λ₯΄λ νλ‘κ·Έλλ° μΈμ΄μ΄κΈ° λλ¬Έ
π§ 24.1 λ μ컬 μ€μ½ν (Lexical Scope)
JS λ ν¨μλ₯Ό μ΄λμ νΈμΆνλκ°κ° μλ, ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ νλ€.
=> μ΄λ₯Ό λ μ컬 μ€μ½ν (μ μ μ€μ½ν) λΌκ³ νλ€.
lexical : μ΄νμ, μ΄νμ μΈ, μ¬μ μ μΈ
scope: λ²μ
(μ¬μ μ μΌλ‘ μ μλ λ²μ λΌλ λλμΈκ°?)
"ν¨μμ μμ μ€μ½νλ₯Ό κ²°μ νλ€" = " λ μ컬 νκ²½μ μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°μ μ μ₯ν μ°Έμ‘°κ°μ κ²°μ νλ€"
......
π§ 24.2 ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]]
ν¨μλ μμ μ΄ μ μλ νκ²½, μ¦ μμ μ€μ½ν(ν¨μ μ μκ° μμΉνλ μ€μ½νκ° λ°λ‘ μμ μ€μ½νμ)λ₯Ό κΈ°μ΅ν΄μΌ νλ€.
=> μ΄λ₯Ό μν΄ ν¨μλ μμ μ λ΄λΆ μ¬λ‘― [[Environment]] μ μμ μ΄ μ μλ νκ²½, μ¦ μμ μ€μ½νμ μ°Έμ‘°λ₯Ό μ μ₯νλ€.
=> νΈμΆ μ μ°Έμ‘°κ°μ΄ μμ±λλλ°, μ΄ μ°Έμ‘°κ°μ΄ "μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°" λΌλ κ³³μ μ μ₯λλ μ°Έμ‘°κ°μ.
κ·ΈλκΉ λ μ컬 νκ²½μ ν¨μμ μ£Όλ―Όλ±λ‘λ±λ³Έ κ°μ 건κ°?
π§ 24.3 ν΄λ‘μ μ λ μ컬 νκ²½
const x = 1;
function outer() {
const x = 10;
const inner = function () { console.log(x) }
return inner;
}
const innerFn = outer();
innerFn();
ν¨μλ₯Ό νΈμΆ -> μ€ννκ³ μλͺ μ£ΌκΈ° λ§κ°.
-> ν¨μμ μ€νμ΄ μ’ λ£λλ©΄ μ€ν 컨ν μ€νΈ μ€νμμ μ κ±°λ¨.
-> ν¨μμ μ§μ λ³μ x λ μλͺ μ£ΌκΈ° λ§κ°.
κ·Όλ° λ§¨ λ§μ§λ§μ λμ€λ κ°μ΄ λλκ²λ ν¨μ λ΄λΆ κ°μΈ 10μ! γ΄γ γ±
μ΄μ²λΌ μΈλΆ ν¨μλ³΄λ€ μ€μ²© νμκ° λ μ€λ μ μ§λλ κ²½μ°
μ€μ²© ν¨μλ μ΄λ―Έ μλͺ μ£ΌκΈ°κ° μ’ λ£ν μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°ν μ μλ€.
μ΄λ° μ€μ²© ν¨μλ₯Ό ν΄λ‘μ λΌκ³ λΆλ₯Έλ€.
-> ν¨μ μ€νμ΄ λλ ν , μ€ν 컨ν μ€νΈκ° μ€νμμ μ κ±°λμ§λ§
ν¨μμ λ μ컬 νκ²½ κΉμ§ μλ©Ένλ κ²μ μλλ€.
outer ν¨μμ λ μ컬 νκ²½μ -> inner ν¨μμ [[Environment]] λ΄λΆ μ¬λ‘―μ μν΄ μ°Έμ‘°λκ³ μμ!
μ¦, μΈλΆ ν¨μλ³΄λ€ λ μ€λ μμ‘΄ν μ€μ²© ν¨μλ
μΈλΆ ν¨μμ μμ‘΄ μ¬λΆμ μκ΄ μμ΄ μμ μ΄ μ μλ μμΉμ μν΄ κ²°μ λ μμ μ€μ½νλ₯Ό κΈ°μ΅νλ€.
κ°λΉμ§ 컬λ ν°κ° μ°Έμ‘°νλ λ©λͺ¨λ¦¬ 곡κ°μ ν¨λΆλ‘ ν΄μ νμ§λ μλλ€!
μλ°μ€ν¬λ¦½νΈμ λͺ¨λ ν¨μλ μμ ν¨μλ₯Ό κΈ°μ΅νλ―λ‘ μ΄λ‘ μ μΌλ‘ λͺ¨λ ν¨μλ ν΄λ‘μ λ€.
νμ§λ§ μΌλ°μ μΌλ‘ λͺ¨λ ν¨μλ₯Ό ν΄λ‘μ λΌκ³ λΆλ₯΄μ§ μμ.
μμ μ€μ½νμ μλ³μλ₯Ό μ°Έμ‘°ν΄μ μ¬μ©νμ§ μμΌλ©΄ ν΄λ‘μ μλ.
κ·ΈμΉλ§ μ€ν -> λ°λ‘ μ¨λ¨Ήκ³ -> μλ©Έ νλ©΄ ν΄λ‘μ μλ.
ν΄λ‘μ λ μ€μ²© ν¨μκ° μμ μ€μ½νμ μλ³μλ₯Ό μ°Έμ‘°νκ³ μκ³
& μ€μ²© ν¨μκ° μΈλΆ ν¨μλ³΄λ€ λ μ€λ μ μ§λλ κ²½μ°μ νμ νλ κ²μ΄ μΌλ°μ .
(κ·Έλ¦¬κ³ ν΄λ‘μ μ μν΄ μ°Έμ‘°λλ μμ μ€μ½νμ λ³μ : μμ λ³μ λΌκ³ ν¨. )
ν΄λ‘μ μ λ©λͺ¨λ¦¬ μ μ λ κ±±μ ν λ§ν κ²μ μλ.
ν΄λ‘μ λ JS μ κ°λ ₯ν κΈ°λ₯μΌλ‘, νμνλ€λ©΄ μ κ·Ήμ μΌλ‘ νμ©νλΌκ³ ν¨.
π§ 24.4 ν΄λ‘μ μ νμ©
ν΄λ‘μ λ μν state λ₯Ό μμ νκ² λ³κ²½νκ³ μ μ§νκΈ° μν΄ μ¬μ©νλ€.
λ€μ λ§ν΄, μνκ° μλμΉ μκ² λ³κ²½λμ§ μλλ‘
μνλ₯Ό μμ νκ² μλνκ³ νΉμ ν¨μμκ²λ§ μν λ³κ²½μ νμ©νκΈ° μν΄ μ¬μ©νλ€.
?μ₯..? useState???
μ€.. λ§μλ... μκ΄ μμλ...
μ±κΈ° λ°©κΈ°
μμ λ λ§₯λ½λ§ μ΄λ μ λλ§ μ΄ν΄λλ©΄ λμ΄κ°μ.
μ΄μ°¨νΌ λ€μ λ΄μΌν¨.
π§ 24.5 μΊ‘μνμ μ 보 μλ
μΊ‘μν : κ°μ²΄μ νλ‘νΌν°μ λ©μλλ₯Ό νλλ‘ λ¬Άλ κ².
-> νΉμ νλ‘νΌν°λ κ°μ²΄λ₯Ό κ°μΆ λͺ©μ μΌλ‘ μ¬μ©νκΈ°λ ν¨. μ¦, μ 보 μλμ μν΄ μ¬μ©νκΈ°λ ν¨.
λλΆλΆμ κ°μ²΄μ§ν₯ μΈμ΄λ ν΄λμ€λ₯Ό μ μνκ³ , μ κ·Ό μ νμλ‘ κ³΅κ° λ²μλ₯Ό μ ν μ μμ§λ§,
JS λ μ κ·Ό μ νμ (public, private, protected) λ₯Ό μ 곡νμ§ μλλ€.
μ¦μ μ€ν ν¨μλ₯Ό μ΄μ©ν΄ -> μμ±μ ν¨μμ μΈμ€ν΄μ€κ° μμλ°μ μ¬μ©ν prototype λ©μλ -> μ¦μ μ€ν ν¨μκ° μ’ λ£λ ν νΈμΆλ¨.
ν¨μ λ΄λΆμ λ³μλ₯Ό μ§μ μ μΌλ‘ νΈμΆνλ©΄ μλλλ°, ν¨μλ‘ λΆλ₯΄λ©΄ μ°Έμ‘° κ°λ₯.
JS λ μ 보 μλμ μμ νκ² μ§μνμ§ μμ.
private νλ΄λ κ°λ₯κ°μ§λ§, νλ‘ν νμ λ©μλλ₯Ό μ΄μ©νλ©΄ μ΄κ²λ λΆκ°λ₯ν¨.
π§ 24.6 μμ£Ό λ°μνλ μ€μ
var λ‘ μ μΈν λ³μ : λΈλ‘ λ λ²¨μ΄ μλ ν¨μ λ 벨 μ€μ½νλ₯Ό κ°μ§λ μ μ μ.
for λ¬Έμμ let μ¬μ©μ -> for λ¬Έμ΄ λ°λ³΅λ λ λ§λ€ for λ¬Έ μ½λ λΈλ‘μ μλ‘μ΄ λ μ컬 νκ²½μ΄ μμ±λ¨.
=> for λ¬Έμ μλ ν¨μ=> μ€νλ λλ§λ€ λ μ컬 νκ²½μ΄ μλ‘ μμ±λ¨.
λμ... μ΄λ ΅λ€..
λ―Έλμ λμΌ κ³΅λΆνκ³ μμ λ€μ μ 리 λΆννλ€!
'λ μ λͺ©λ‘ > λͺ¨λ₯λ€ Modern JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λͺ¨λ₯λ€] 26μ₯ ES6 ν¨μμ μΆκ° κΈ°λ₯ (0) | 2023.05.21 |
---|---|
[λͺ¨λ₯λ€] 25μ₯ ν΄λμ€ (1) (0) | 2023.05.18 |
[λͺ¨λ₯λ€] 23μ₯ μ€ν 컨ν μ€νΈ (0) | 2023.05.16 |
[λͺ¨λ₯λ€] 22μ₯ this (0) | 2023.05.14 |
[λͺ¨λ₯λ€] 21μ₯ λΉνΈμΈ κ°μ²΄ (0) | 2023.05.14 |