𫧠12.1 ν¨μλ?
JSμμ κ°μ₯ μ€μν ν΅μ¬ κ°λ .
λ€λ₯Έ ν΅μ¬ κ°λ (μ€μ½ν, μ€ν 컨ν μ€νΈ λ±..) κ³Ό κΉμ κ΄λ ¨μ΄ μμ.
JS λ₯Ό μ΄ν΄νκΈ° μν ν΅μ¬ μ€μ ν΅μ¬
ν¨μλ μΌλ ¨μ κ³Όμ μ λ¬ΈμΌλ‘ ꡬν,
μ½λ λΈλ‘μΌλ‘ κ°μΈμ νλμ μ€ν λ¨μλ‘ μ μν κ².
μ λ ₯μ λ°μμ μΆλ ₯μ λ΄λ³΄λ.
맀κ°λ³μ : ν¨μ λ΄λΆλ‘ μ λ ₯μ μ λ¬λ°λ λ³μ
μΈμ : μ λ ₯
λ°νκ°: μΆλ ₯
ν¨μλ ν¨μ μ μλ₯Ό ν΅ν΄ μμ±λ¨.
ν¨μ νΈμΆ : ν¨μλ μ μλ§μΌλ‘ μ€νλλ κ²μ΄ μλλΌ, μ€νμ λͺ μμ μΌλ‘ μ§μν΄μΌν¨.
𫧠12.2 ν¨μλ₯Ό μ¬μ©νλ μ΄μ
λμΌν λ°λ³΅ μμ μ μνν μ, μ¬λ¬λ² νΈμΆ κ°λ₯ -> μ½λμ μ¬μ¬μ© κ°λ₯
μ¬λ¬ λ² μμ± μ μμ νλ €λ©΄ 걸리λ μκ° & μ€λ₯ κ°λ₯μ± μ¦κ° -> μ μ§λ³΄μμ νΈμμ±κ³Ό μ½λμ μ λ’°μ±μ λμ΄κΈ° μν΄
ν¨μμ λΆμ΄λ μ΄λ¦μΈ μλ³μλ₯Ό μ μ ν΄μΌ μ½λμ κ°λ μ±μ ν₯μμν¬ μ μλ€.
𫧠12.3 ν¨μ 리ν°λ΄
JS μ ν¨μλ κ°μ²΄ νμ μ κ°. -> ν¨μ 리ν°λ΄λ‘ μμ±ν μ μμ.
ν¨μ 리ν°λ΄μ ꡬ쑰
- function ν€μλ
- ν¨μ μ΄λ¦ (μλ³μ λ€μ΄λ° κ·μΉμ μ€μν΄μΌν¨. μ΄λ¦μ μλ΅μ΄ κ°λ₯)
- λ§€κ° λ³μ λͺ©λ‘ (0κ° μ΄μ, μμκ° μ€μ, ν¨μ λͺΈμ²΄ λ΄μμ λ³μμ λμΌν μ·¨κΈ)
- ν¨μ λͺΈμ²΄ (ν¨μ νΈμΆ μ μΌκ΄μ μΌλ‘ μ€νλ λ¬Έλ€μ νλμ μ€ν λ¨μλ‘ μ μν μ½λ λΈλ‘)
ν¨μλ κ°μ²΄μ.
- μΌλ° κ°μ²΄μμ μ°¨μ΄μ : νΈμΆ κ°λ₯ μ¬λΆ
𫧠12.4 ν¨μ μ μ
ν¨μ νΈμΆ μ΄μ μ 맀κ°λ³μ, μ€νν λ¬Έ, λ°νν κ°μ μ§μ νλ κ².
ν¨μλ₯Ό μ μνλ λ²
- ν¨μ μ μΈλ¬Έ
function add(x, y){
return x + y;
}
- ν¨μ ννμ
const add = function (x, y){
return x + y;
}
- Function μμ±μ ν¨μ
const add = new Function('x', 'y', 'return x + y');
- νμ΄ν ν¨μ
const add = (x, y) => x + y;
π λ³μ μ μΈκ³Ό ν¨μ μ μ
- ν¨μ μ μΈλ¬Έμ΄ νκ°λλ©΄ μλ³μκ° μ묡μ μΌλ‘ μμ± & ν¨μ κ°μ²΄κ° ν λΉλ¨
12.4.1 ν¨μ μ μΈλ¬Έ
function add(x, y){
return x + y;
}
ν¨μ 리ν°λ΄κ³Ό ννκ° λμΌνμ§λ§,
ν¨μ 리ν°λ΄μ μ΄λ¦μ μλ΅ν μ μμΌλ,
ν¨μ μ μΈλ¬Έμ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€.
ν¨μ μ μΈλ¬Έμ ννμμ΄ μλ λ¬Έ.
(ν¬λ‘¬ μ½μμμ μ μΈνλ©΄ undefined κ° μΆλ ₯λ¨)
ννμμ΄ μλ λ¬Έμ λ³μμ ν λΉν μ μμ -> ν¨μ μ μΈλ¬Έλ λ³μμ ν λΉν μ μμ.
νμ§λ§ ν λΉ λλ κ² μ²λΌ 보μ.
const add = function add(x, y) {
return x + y;
}
-> JS μμ§μ΄ μ½λμ λ°λΌ ν¨μ 리ν°λ΄κ³Ό ν¨μ μ μΈλ¬Έμ κ°κ°μΌλ‘ ν΄μνλ κ²½μ°κ° μκΈ° λλ¬Έ.
ν¨μ μ μΈλ¬Έμ΄λ ν¨μ 리ν°λ΄μ΄λ ν¨μκ° μμ±λλ κ²μ λμΌνμ§λ§,
λ΄λΆ λμμ μ°¨μ΄κ° μλ€.
ν¨μ μ μΈλ¬ΈμΌλ‘ μμ±λ ν¨μ -> νΈμΆ κ°λ₯
ν¨μ 리ν°λ΄ ννμμΌλ‘ μμ±λ ν¨μ -> νΈμΆ λΆκ°λ₯
ν¨μ μ΄λ¦ -> ν¨μ λ΄λΆμμλ§ μ¬μ©
μλ³μ -> μΈλΆμμ νΈμΆμ μ¬μ©. μμΌλ©΄ JS μμ§μ΄ ν¨μ μ΄λ¦κ³Ό λμΌν μλ³μλ₯Ό μ묡μ μΌλ‘ μμ± & ν¨μ κ°μ²΄λ₯Ό ν λΉν¨.
μ¦, ν¨μλ ν¨μ μ΄λ¦μ΄ μλ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ νΈμΆν¨.
12.4.2 ν¨μ ννμ
const add = function (x, y){
return x + y;
}
μΌκΈ κ°μ²΄: κ°μ μ±μ§μ κ°λ κ°μ²΄
=> ν¨μλ μΌκΈ κ°μ²΄μ.
=> ν¨μλ₯Ό κ°μ²λΌ μμ λ‘κ² μ¬μ©ν μ μλ€λ μλ―Έ
ν¨μ μ μΈλ¬Έ : ννμμ΄ β λ¬Έ
ν¨μ ννμ : ννμμΈ λ¬Έ
12.4.3 ν¨μ μμ± μμ κ³Ό ν¨μ νΈμ΄μ€ν
ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μ -> μ μΈλ¬Έ μ΄μ μ νΈμΆ κ°λ₯
ν¨μ ννμμΌλ‘ μ μν ν¨μ -> ννμ μ΄μ μ νΈμΆ β
=> μμ± μμ μ΄ λ€λ₯΄κΈ° λλ¬Έ
ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μ | ν¨μ ννμμΌλ‘ μ μν ν¨μ |
- λ°νμ μ΄μ μ κ°μ²΄ μμ± - JS μμ§μ΄ ν¨μ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μ μ묡μ μμ± -> λ°νμμ μ΄λ―Έ ν¨μ κ°μ²΄ μμ± μλ£ & μλ³μμ ν λΉκΉμ§ μλ£λ μν ν¨μ νΈμ΄μ€ν : ν¨μμ μ μΈλ¬Έμ΄ μ½λμ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ JS κ³ μ μ νΉμ§ |
- λ³μμ ν λΉλλ κ°μ΄ ν¨μ 리ν°λ΄μΈ λ¬Έ - ν λΉλ¬Έμ΄ μ€νλλ μμ , μ¦ λ°νμμ νκ°λ¨ - ν¨μ νΈμ΄μ€ν μ΄ μλλΌ, λ³μ νΈμ΄μ€ν μ΄ λ°μν¨. -> ν¨μ ννμ μ΄μ μ ν¨μλ₯Ό μ°Έμ‘°νλ©΄ undefined λ‘ νκ°λ¨. => ν¨μ μ μΈλ¬Έμ ν¨μ νΈμ΄μ€ν λλ¬Έμ ν¨μ ννμμ μ¬μ©ν κ²μ κΆμ₯ν¨. |
12.4.4 Function μμ±μ ν¨μ
const add = new Function('x', 'y', 'return x + y');
new μ°μ°μλ νΈμΆ.
Function μμ±μ ν¨μλ‘ ν¨μλ₯Ό μμ±νλ λ°©μ
- μΌλ°μ μ΄μ§ μμ
- λ°λμ§νμ§ μμ
=> ν΄λ‘μ μμ± β & ν¨μ μ μΈλ¬Έμ΄λ ννμμΌλ‘ μμ±ν ν¨μμ λ€λ₯΄κ² λμν¨.
12.4.5 νμ΄ν ν¨μ
const add = (x, y) => x + y;
νμ μ΅λͺ ν¨μλ‘ μ μν¨.
ν¨μ μ μΈλ¬Έ νΉμ ννλ¬Έμ μμ ν λ체νμ§λ λͺ»ν¨.
νν λΏ μλλΌ λ΄λΆ λμλ κ°λ΅ν λμ΄ μμ.
- μμ±μ ν¨μλ‘ μ¬μ©ν μ μμ.
- κΈ°μ‘΄ ν¨μμ this λ°μΈλ© λ°©μμ΄ λ€λ¦
- prototype νλ‘νΌν°κ° μμ
- arguments κ°μ²΄λ₯Ό μμ±νμ§ μμ.
(λμ€μ λ€μμ λ λ°°μ)
𫧠12.5 ν¨μ νΈμΆ
12.5.1 맀κ°λ³μμ μΈμ
ν¨μ μ€νμ νμν κ°μ μΈλΆμμ μ λ¬ ν κ²½μ° -> 맀κ°λ³μ(μΈμ)λ₯Ό ν΅ν΄ μΈμλ₯Ό μ λ¬.
μΈμλ κ°μΌλ‘ νκ°λ μ μλ ννμμ΄μ¬μΌν¨.
----------------------------------------------
function add (a, b) {
return a + b;
}
add ( 1, 2 );
---------------------------------------------
ν¨μλ 맀κ°λ³μμ κ°μμ μΈμμ κ°μκ° μΌμΉνλμ§ μ²΄ν¬νμ§ μμ.
λ§€κ° λ³μλ³΄λ€ μΈμκ°
λ λ€μ΄μ€λ©΄ undefined,
λ λ€μ΄μ€λ©΄ 무μν¨.
12.5.2 μΈμ νμΈ
JSλ νμ μ νμΈν΄μ£Όμ§ μμΌλ―λ‘ νμ κ³Ό μκ΄μμ΄ μΈμλ₯Ό λ³΄λΌ μ μλ€.
-> μ μ ν μΈμκ° μ λ¬λμλμ§ νμΈν νμκ° μλ€.
TS λ₯Ό λμ νλ κ²λ νλμ λ°©λ²μ.
12.5.3 맀κ°λ³μμ μ΅λ κ°μ
맀κ°λ³μλ κ°μλ³΄λ€ μμμ μλ―Έκ° μμ.
μ΅λ 3κ° μ΄μμ λμ§ μλ κ²μ κΆμ₯ν¨.
(μ μ§ λ³΄μμ μ€λ₯ λ°μλ₯ μ νλ₯Ό μν΄)
12.5.4 λ°νλ¬Έ
return
μν 1. ν¨μμ μ€νμ μ€λ¨νκ³ ν¨μ λͺΈμ²΄λ₯Ό λΉ μ Έλκ°. (return λ¬Έ μ΄νμ μ°μ¬μ§ μ½λλ μ€ν μλ¨)
μν 2. return λ¬Έ λ€μ ννμμ νκ°ν΄ λ°νν¨. λͺ μμ μΌλ‘ μ§μ νμ§ μμΌλ©΄ undefined λ°ν
λ°νλ¬Έ μλ΅ κ°λ₯.
μλ΅ν κ²½μ° undefined λ°ν.
return ν€μλμ λ°νκ° μ¬μ΄μ μ€λ°κΏμ΄ μμΌλ©΄
-> return λ€μ ; μΈλ―Έμ½λ‘ μΆκ°λ¨. λ°νκ°μ 무μλ¨.
(Node.js λ λ 립μ μΈ νμΌ μ€μ½νλ₯Ό κ°μ§κΈ° λλ¬Έμ, νμΌμ κ°μ₯ λ°κΉ₯μ λ°νλ¬Έ μ¬μ©ν΄λ μλ¬ λ°μ β)
𫧠12.6 μ°Έμ‘°μ μν μ λ¬κ³Ό μΈλΆ μνμ λ³κ²½
ν¨μλ‘ μμ κ°μ λ°μΌλ©΄ -> νΌμ μλ¨.
κ°μ²΄λ₯Ό λ°μΌλ©΄ -> νΌμλ¨.
μ°Έμ‘°κ°μ λ겨주기 λλ¬Έμ μλ³Έ κ°μ²΄κ° λ³κ²½λ¨.
=> μΆμ λ μ΄λ €μ 볡μ‘μ± μ¦κ°, κ°λ μ±μ ν΄μΉκ² λ¨.
< ν΄κ²° λ°©λ² >
1. λκ°μ κ°μ²΄λ₯Ό μλ‘κ² μμ± (λ 립μ μΌλ‘ 볡μ ) ν μ¬μ©νκΈ°. === κΉμ 볡μ¬
=> κ°μ²΄λ₯Ό λΆλ³ κ°μ²΄(λ³κ²½ λΆκ°λ₯ν κ°)μΌλ‘ λ§λ€κΈ°
2. μμ ν¨μ μ¬μ© (μΈλΆμν λ³κ²½ β, μΈλΆ μνμ μμ‘΄ β)
𫧠12.7 λ€μν ν¨μμ νν
12.7.1 μ¦μ μ€ν ν¨μ
(ν¨μ μ μ)();
-> λ¨ νλ²λ§ νΈμΆλλ©°, μ¬νΈμΆ μλ¨.
μ€ν ν¨μ(ν¨μ μ μλΆλΆ)μ κΌ () λ‘ κ°μΈμΌ νλ€.
μ¦μ μ€ν ν¨μλ μΌλ° ν¨μμ²λΌ κ°μ λ°νν μ μκ³ μΈμλ₯Ό μ λ¬ν μλ μμ.
const add = (function (a, b){
return a + b;
})(5, 3);
12.7.2 μ¬κ· ν¨μ
μκΈ° μμ μ νΈμΆ.
λ°λ³΅λλ μ²λ¦¬λ₯Ό μν΄ μ¬μ©ν¨.
νν λ¦¬μΌ ! κ³μ°ν λ μ’μ
function factorial(n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
ν¨μ λ΄λΆμμ ν¨μ μ΄λ¦μ μ¬μ©ν΄ μ¬κ· ν μ μμ.
κ·Όλ° ν¨μ μΈλΆμμ μλ³μλ‘ νΈμΆν΄μΌν¨.
λλΆλΆμ μ¬κ·ν¨μλ for λ¬Έ, while λ¬ΈμΌλ‘ νν κ°λ₯.
λ°λ³΅λ¬Έλ³΄λ€ μ§κ΄μ μΌλ‘ ννν μ μμ λ μ¬μ©νλ κ±Έ κΆμ₯ν¨.
12.7.3 μ€μ²© ν¨μ
μ€μ²© ν¨μ : ν¨μ λ΄λΆμ μ μλ ν¨μ. μΌλ°μ μΌλ‘ μΈλΆν¨μλ₯Ό λλ ν¬νΌ ν¨μμ μν μ ν¨.
μΈλΆ ν¨μ : μ€μ²© ν¨μλ₯Ό ν¬ν¨ν ν¨μ
12.7.4 μ½λ°± ν¨μ
μ½λ°± ν¨μ : ν¨μμ 맀κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μ
κ³ μ°¨ ν¨μ : λ§€κ° λ³μλ‘ ν¨μμ μΈλΆμμ μ½λ°± ν¨μλ₯Ό μ λ¬λ°μ ν¨μ
κ³ μ°¨ ν¨μλ μ½λ°±ν¨μμ νΈμΆ μμ μ κ²°μ ν΄μ νΈμΆν¨.
=> μ½λ°± ν¨μλ κ³ μ°¨ ν¨μμ μν΄ νΈμΆλλ©°, νμμ λ°λΌ μ½λ°± ν¨μμ μΈμλ₯Ό μ λ¬ν μ μμ.
=> κ³ μ°¨ ν¨μμ μ½λ°± ν¨μλ₯Ό μ λ¬ν λ, μ½λ°±ν¨μλ₯Ό νΈμΆνμ§ μκ³ ν¨μ μ체λ₯Ό μ λ¬ν΄μΌν¨.
() λΆμ¬μ μ λ¬νλ©΄ μλ¨.
12.7.5 μμ ν¨μμ λΉμμ ν¨μ
μμ ν¨μ | λΉμμ ν¨μ |
- μΈλΆ μνμ μμ‘΄ β && μΈλΆ μν λ³κ²½ β -> λΆμ ν¨κ³Όκ° μλ ν¨μ - λμΌν μΈμ μ λ¬ -> λμΌν κ° λ°ν - μ΅μ νλ μ΄μμ μΈμλ₯Ό μ λ¬ λ°μ. - μΈμμ λΆλ³μ± μ μ§ |
- μΈλΆ μν μμ‘΄ β || μΈλΆ μν λ³κ²½ β -> λΆμ ν¨κ³Όκ° μλ ν¨μ - μΈλΆ μνμ λ°λΌ λ°νκ°μ΄ λ¬λΌμ§. - μΈλΆ μν : μ μ λ³μ, μλ² λ°μ΄ν°, νμΌ, DOM λ±... |
ν¨μν νλ‘κ·Έλλ°
- μΈλΆ μνλ₯Ό λ³κ²½νλ λΆμ ν¨κ³Όλ₯Ό μ΅μν => λΆλ³μ± μ§ν₯νλ νλ‘κ·Έλλ° ν¨λ¬λ€μ.
- λ°λ³΅λ¬Έ, 쑰건문 μ κ±° -> 볡μ‘μ± ν΄κ²°
- λ³μ μ¬μ© μ΅μ , μλͺ μ£ΌκΈ° μ΅μν -> μν λ³κ²½ νΌν¨ -> μ€λ₯ μ΅μν
=> μ€λ₯λ₯Ό νΌνκ³ νλ‘κ·Έλ¨μ μμ μ±μ λμ΄λ €λ λ Έλ ₯μ μΌνμ.
'λ μ λͺ©λ‘ > λͺ¨λ₯λ€ Modern JS Deep Dive' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λͺ¨λ₯λ€] 14μ₯ μ μ λ³μμ λ¬Έμ μ (0) | 2023.05.06 |
---|---|
[λͺ¨λ₯λ€] 13μ₯ μ€μ½ν (0) | 2023.05.05 |
[λͺ¨λ₯λ€] 11μ₯ μμ κ°κ³Ό κ°μ²΄μ λΉκ΅ (0) | 2023.05.03 |
[λͺ¨λ₯λ€] 09μ₯ νμ λ³νκ³Ό λ¨μΆ νκ° (0) | 2023.05.01 |
[λͺ¨λ₯λ€] 03μ₯ μλ°μ€ν¬λ¦½νΈ κ°λ° νκ²½κ³Ό μ€ν λ°©λ² (0) | 2023.04.25 |