μλ°μ€ν¬λ¦½νΈμ ν¨μλ μμ 쑰건μ λͺ¨λ λ§μ‘±νλ―λ‘ μΌκΈ κ°μ²΄
λΌκ³ λΆλ¦½λλ€.
<script>
// ν¨μλ 무λͺ
μ 리ν°λ΄λ‘ μμ±ν μ μμ
// ν¨μλ λ³μ(κ°μ²΄, λ°°μ΄ λ±)μ μ μ₯ν μ μμ
const increase = function (num) {
return ++num;
}
const decrease = function (num) {
return --num;
}
// ν¨μλ λ³μ(κ°μ²΄, λ°°μ΄ λ±)μ μ μ₯ν μ μμ
const predicates = { increase, decrease };
// ν¨μμ λ§€κ°λ³μμ μ λ¬ κ°λ₯
// ν¨μμ λ°νκ°μΌλ‘ μ¬μ© κ°λ₯
function makeCounter(predicate) {
let num = 0;
return function () {
num = predicate(num);
return num;
};
}
// ν¨μλ λ§€κ°λ³μμκ² ν¨μλ₯Ό μ λ¬ κ°λ₯ν¨
const increaser = makeCounter(predicates.increase);
console.log(increaser()); // 1
console.log(increaser()); // 2
const decreaser = makeCounter(predicates.decrease);
console.log(increaser()); // -1
console.log(increaser()); // -2
</script>
ν¨μκ° μΌκΈ κ°μ²΄λΌλ κ²μ ν¨μλ₯Ό κ°μ²΄μ λμΌνκ² μ¬μ©ν μ μλ€λ μλ―ΈλΌκ³ ν©λλ€.
κ°μ²΄λ κ°
μ΄λ―λ‘ ν¨μλ κ°κ³Ό λμΌνκ² μ·¨κΈν μ μμ΅λλ€.
μ¦ ν¨μλ κ°μ μ¬μ©ν μ μλ κ³³(λ³μ ν λΉλ¬Έ,κ°μ²΄μ νλ‘νΌν° κ°,λ°°μ΄μ μμ,ν¨μ νΈμΆμ μΈμ, ν¨μ λ°νλ¬Έ)μ΄λΌλ©΄ μ΄λμλ μ§ λ¦¬ν°λ΄λ‘ μ μν μ μμΌλ©° λ°νμμ ν¨μ κ°μ²΄λ‘ νκ°λλ€κ³ ν©λλ€.
μΌκΈ κ°μ²΄λ‘μ ν¨μκ° κ°μ§λ κ°μ₯ ν° νΉμ§μ
μΌλ° κ°μ²΄μ κ°μ΄ ν¨μμ λ§€κ°λ³μμ μ λ¬ν μ μμΌλ©°,
ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μλ μλ€λ κ²μ
λλ€.
μ΄λ ν¨μν νλ‘κ·Έλλ°μ κ°λ₯μΌ νλ μλ°μ€ν¬λ¦½νΈμ μ₯μ μ€ νλλΌκ³ ν©λλ€.
ν¨μλ κ°μ²΄μ΄μ§λ§ μΌλ° κ°μ²΄μ μ°¨μ΄κ° μμ΅λλ€.
μΌλ° κ°μ²΄ : νΈμΆ λΆκ°λ₯
ν¨μ κ°μ²΄ : νΈμΆ κ°λ₯ , μΌλ°κ°μ²΄μ μλ ν¨μ κ³ μ μ νλ‘νΌν° μμ
ν¨μ κ³ μ μ νλ‘νΌν°λ?
ν¨μ κ°μ²΄μ νλ‘νΌν°λ arguments
caller
length
name
prototype
μ΄ μ‘΄μ¬ν©λλ€.
μ΄ ν¨μ κ°μ²΄μ λ°μ΄ν° νλ‘νΌν°λ μΌλ° κ°μ²΄μ μλ ν¨μ κ°μ²΄ κ³ μ μ νλ‘νΌν°λΌκ³ ν©λλ€.
μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ κΈ°λ° μΈμ΄λ‘, κ°μ²΄ κ° μμμ νλ‘ν νμ 체μΈμ ν΅ν΄ ꡬνν©λλ€. μ¬κΈ°μ νλ‘ν νμ μ κ°μ²΄μ μνμ΄λΌ ν μ μμΌλ©°, κ° κ°μ²΄λ μμ μ λΆλͺ¨ μν μ νλ νλ‘ν νμ μ κ°μ§κ³ μμ΅λλ€. μ΄ νλ‘ν νμ μ μμ κ°μ²΄μ λ°μ΄ν°μ λ©μλλ₯Ό μμ κ°μ²΄μκ² μμνλ μν μ ν©λλ€.
νΉν ν¨μ κ°μ²΄λ prototypeμ΄λΌλ νΉμν νλ‘νΌν°λ₯Ό κ°μ§κ³ μμ΅λλ€. μ΄ prototype νλ‘νΌν°λ₯Ό ν΅ν΄ μμ±μ ν¨μλ μμ μ΄ μμ±ν μΈμ€ν΄μ€μκ² νλ‘ν νμ κ°μ²΄μ μλ λ°μ΄ν°μ λ©μλλ₯Ό μμν©λλ€. μ΄λ μΈμ€ν΄μ€κ° ν΄λΉ λ°μ΄ν°μ λ©μλλ₯Ό μ¬μ©ν μ μλλ‘ ν©λλ€.
μ€μ λ‘ μΈμ€ν΄μ€μμ νΉμ ν€μ μ κ·Όν λ, ν΄λΉ κ°μ²΄μ ν΄λΉ ν€κ° μλ€λ©΄ μμ νλ‘ν νμ μμ μ°Ύμλκ°λλ°, μ΄λ₯Ό νλ‘ν νμ 체μΈμ΄λΌκ³ λΆλ¦ λλ€. μ¦, λΆλͺ¨ κ°μ²΄μμλ μ°Ύμ§ λͺ»νλ©΄ λ μμ νλ‘ν νμ μΌλ‘ μ΄λνμ¬ κ³μν΄μ μ°Ύμ λκ°λλ€.
μ΄λ¬ν νλ‘ν νμ 체μΈμ ν΅ν΄ μλ°μ€ν¬λ¦½νΈλ μ μ°νκ² κ°μ²΄ κ° μμμ ꡬννλ©°, μ½λμ μ¬μ¬μ©μ±κ³Ό νμ₯μ±μ λμ΄λ ν¨κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
<script>
const arr = [3,2,1];
arr.sort(); // [1,2,3]
arr; // [1,2,3]
</script>
λ°°μ΄ μλ£νμ λ΄μ λ³μμμ sort
λ©μλλ₯Ό μ¬μ©ν μ μλ μ΄μ λ
λκ° λ΄λΆμ μΌλ‘ λ°°μ΄ μλ£νμλ μ λ©μλλ₯Ό μΈ μ μκ² μ²λ¦¬ν΄ λμκΈ° λλ¬ΈμΌ κ² μ
λλ€.
λ°λ‘ μμμ΄λΌλ κ°λ
μ ν΅ν΄μ μ²λ¦¬ λμμκ²λλ€.
λ΄λΆμ μΌλ‘ new Array()
ν¨μκ°μ μμ±μ ν¨μλ₯Ό μ μΈν΄μ sort κ°μ λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
Array.prototypeμ μ΄ν΄λ³΄λ©΄ sort,push,pop λ±,
Arrayλ‘ μμ±ν λͺ¨λ λ°°μ΄ μΈμ€ν΄μ€λ ν΄λΉ νλ‘ν νμ
μ μλ λ°μ΄ν°, λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
μΈμ€ν΄μ€ κ°μ²΄μ keyμ μ κ·Όν λ, ν΄λΉ κ°μ²΄μκ² keyκ° μλ€λ©΄ κ·Έ λ€μμΌλ‘ μμ νλ‘ν νμ
(μν) μμ±μμ keyκ° μλμ§ νμΈν©λλ€.
μλ€λ©΄ κ·Έκ²μ μ°ΎκΈ° μν΄ λ μμμ νλ‘ν νμ
(λΆλͺ¨)μμ μ°Ύμ΅λλ€. μ΄κ²μ νλ‘ν νμ
체μΈμ΄λΌκ³ ν©λλ€.
νλ‘ν νμ
체μΈμ μ΅μμμ μμΉνλ κ°μ²΄λ μΈμ λ Object.prototypeμ
λλ€. 체μΈμ μ’
μ μΈ Object.prototype μμλ νλ‘νΌν°λ₯Ό κ²μν μ μμ κ²½μ° undefined
λ₯Ό λ°ν νλ€κ³ ν©λλ€.