πΈ18μ₯. ν¨μμ μΌκΈ κ°μ²΄
β
18.1 μΌκΈ κ°μ²΄
λ€μ 쑰건μ λ§μ‘±νλ κ°μ²΄λ₯Ό **μΌκΈ κ°μ²΄
**λΌκ³ νλ€.
무λͺ μ 리ν°λ΄λ‘ μμ±ν μ μλ€. β λ°νμμ μμ±μ΄ κ°λ₯νλ€.
λ³μλ μλ£κ΅¬μ‘°(κ°μ²΄, λ°°μ΄ λ±)μ μ μ₯ν μ μλ€.
ν¨μμ λ§€κ°λ³μμ μ λ¬ν μ μλ€.
ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€.
μλ°μ€ν¬λ¦½νΈμ ν¨μλ μΌκΈ κ°μ²΄λ€.
// 1. 무λͺ
리ν°λ΄λ‘ μμ±κ°λ₯
// 2. ν¨μλ λ³μμ μ μ₯ κ°λ₯
// -> λ°νμ μμ μ ν¨μ 리ν°λ΄μ΄ νκ°λμ΄ ν¨μ κ°μ²΄κ° μμ±λκ³ λ³μμ ν λΉλλ€.(μ ννλ ν¨μ κ°μ²΄μ μ°Έμ‘°κ°μ΄ ν λΉ λλ€.)
const increase = function (num) {
return ++num;
};
const decrease = function (num) {
return --num;
};
// 2. ν¨μλ κ°μ²΄μ μ μ₯ κ°λ₯
const predicate = { increase, decrease };
// 3. ν¨μλ λ§€κ°λ³μμ μ λ¬ κ°λ₯
// 4. ν¨μλ λ°ν κ°μΌλ‘ μ¬μ© κ°λ₯
function makeCounter(predicate) {
let num = 0;
return function () {
num = predicate(num);
return num;
};
}
// 3. ν¨μλ λ§€κ°λ³μμκ² ν¨μ μ λ¬ κ°λ₯
const increaser = makeCounter(predicate.increase);
console.log(increaser()); // 1
console.log(increaser()); // 2
const decreaser = makeCounter(predicate.decrease);
console.log(decreaser()); // -1
console.log(decreaser()); // -2
μΌκΈ κ°μ²΄λ‘μ ν¨μκ° κ°μ§λ κ°μ₯ ν° νΉμ§μ
μΌλ° κ°μ²΄μ κ°μ΄ ν¨μλ₯Ό ν¨μμ λ§€κ°λ³μμ μ λ¬ν μ μκ³
ν¨μμ λ°νκ°μΌλ‘ ν¨μλ₯Ό μ¬μ©ν μ μλ€.
μ΄λ μλ°μ€ν¬λ¦½νΈμ ν¨μν νλ‘κ·Έλλ°μ κ°λ₯νκ² νλ€.
μΌλ° κ°μ²΄μλ λ€λ₯΄κ²
μΌλ° κ°μ²΄λ νΈμΆν μ μμ§λ§, ν¨μ κ°μ²΄λ νΈμΆν μ μλ€.
ν¨μ κ°μ²΄λ μΌλ° κ°μ²΄μλ μλ ν¨μ κ³ μ μ νλ‘νΌν°λ₯Ό μμ νλ€.
β
18.2 ν¨μ κ°μ²΄μ νλ‘νΌν°
ν¨μλ κ°μ²΄μ΄κΈ° λλ¬Έμ νλ‘νΌν°λ₯Ό κ°μ§ μ μλ€.
ν¨μμ λͺ¨λ νλ‘νΌν°
arguments
,caller
,length
,name
,prototype
νλ‘νΌν° : ν¨μ κ°μ²΄μ λ°μ΄ν° νλ‘νΌν°(ν¨μ κ°μ²΄ κ³ μ μ νλ‘νΌν°)__proto__
:μ κ·Όμ νλ‘νΌν°. Object.prototype κ°μ²΄μ νλ‘νΌν°λ₯Ό μμλ°μ κ²(λͺ¨λ κ°μ²΄ μ¬μ© κ°λ₯)
κ° νλ‘νΌν°μ λν΄ κ°λ¨νκ²λ§ μ΄ν΄λ³΄μλ©΄,
arguments νλ‘νΌν°
κ° : arguments κ°μ²΄(μ λ¬λ μΈμλ€μ μ 보λ₯Ό λ΄κ³ μλ μν κ°λ₯ν(iterable)μ μ¬ λ°°μ΄ κ°μ²΄)
ν¨μ λ΄λΆμμ μ§μλ³μμ²λΌ μ¬μ©νκΈ° λλ¬Έμ μΈλΆμμ μ°Έμ‘°ν μ μλ€.
λ§€κ°λ³μ κ°μλ₯Ό νμ ν μ μλ κ°λ³ μΈμ ν¨μ λ₯Ό ꡬνν λ μ μ©
arguments κ°μ²΄λ μ μ¬λ°°μ΄κ°μ²΄μ΄μ§ λ°°μ΄ κ·Έμ체λ μλκΈ° λλ¬Έμ, λ°°μ΄ λ©μλλ₯Ό μ¬μ©ν κ²½μ° μλ¬κ° λ°μνλ€. β ES6λΆν°
Rest νλΌλ―Έν°
λμ
caller νλ‘νΌν°
λΉνμ€ νλ‘νΌν°. ν¨μ μμ μ νΈμΆν ν¨μλ₯Ό κ°λ¦¬ν΄
length νλ‘νΌν°
ν¨μλ₯Ό μ μν λ μ μΈν λ§€κ°λ³μμ κ°μ
name νλ‘νΌν°
ν¨μμ μ΄λ¦
μ΅λͺ ν¨μμ κ²½μ°,
ES5 β λΉ λ¬Έμμ΄(
''
)ES6 β ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μ
__proto__
μ κ·Όμ νλ‘νΌν°
νλ‘ν νμ κ°μ²΄μ μ κ·ΌνκΈ° μν΄ μ¬μ©νλ μ κ·Όμ νλ‘νΌν°λ‘,
μ΄ νλ‘νΌν°μ μ§μ μ κ·Όν μλ μκ³ κ°μ μ μΈ λ°©λ²μΌλ‘ μ κ·Ό κ°λ₯
prototype νλ‘νΌν°
μμ±μ ν¨μλ‘ νΈμΆν μ μλ ν¨μ κ°μ²΄. ( constructorλ§μ΄ μμ νλ νλ‘νΌν°)
Last updated