21/09/12 TL. μλ°μ€ν¬λ¦½νΈ - ν¨μ(1)
- -
π ν¨μλ?
ν¨μ : μΌλ ¨μ κ³Όμ μ λ¬ΈμΌλ‘ ꡬννκ³ μ½λ λΈλ‘μΌλ‘ κ°μΈμ νλμ μ€ν λ¨μλ‘ μ μν κ²μ λ§νλ€.
π ν¨μ 리ν°λ΄
jsμ ν¨μλ κ°μ²΄ νμ μ κ°μ΄λ€. λ°λΌμ ν¨μ 리ν°λ΄λ‘ μμ±ν μ μλ€. μΌλ° κ°μ²΄λ νΈμΆν μ μμ§λ§ ν¨μλ νΈμΆν μ μλ€.
- ν¨μκ° κ°μ²΄λΌλ μ¬μ€μ λ€λ₯Έ μΈμ΄μ ꡬλ³λλ jsμ νΉμ§μ΄λ€.
π ν¨μ μ μ
ν¨μ μ μνλ λ°©λ²μ 4κ°μ§κ° μλ€.
- ν¨μ μ μΈλ¬Έ
- ν¨μ ννμ
- Function μμ±μ ν¨μ
- νμ΄ν ν¨μ
λͺ¨λ ν¨μ μ μ λ°©μμ ν¨μλ₯Ό μ μνλ€λ 곡ν΅μ μ΄ μμ§λ§ μ€μν μ°¨μ΄κ° μλ€.
- λ³μλ μ μΈνλ€κ³ νκ³ ν¨μλ μ μνλ€κ³ νννλ€. νμ μ μΈλ¬Έμ΄ νκ°λλ©΄ μλ³μκ° μ묡μ μΌλ‘ μμ±λκ³ ν¨μ κ°μ²΄κ° ν λΉλλ€.
π₯₯ ν¨μ μ μΈλ¬Έ
function add(x, y) {
return x + y;
}
// ν¨μ μ°Έμ‘°
// console.dirμ ν¨μ κ°μ²΄μ νλ‘νΌν°κΉμ§ μΆλ ₯νλ€.
// Node.js νκ²½μμλ console.logμ κ°μ κ²°κ³Όκ° μΆλ ₯λλ€.
console.dir(add); // f add(x, y)
// ν¨μ νΈμΆ
console.log(add(2, 5));
ν¨μ 리ν°λ΄μ ν¨μ μ΄λ¦μ μλ΅ν μ μμΌλ ν¨μ μ μΈλ¬Έμ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€. ν¨μ μ μΈλ¬Έμ ννμμ΄ μλ λ¬Έμ΄λ€. λ°λΌμ λ³μμ ν λΉν μ μλ€. κ·Έλ λ€λ©΄ λ€μκ³Ό κ°μ μ½λλ μ΄λ»κ² κ°λ₯ν κ²μΌκΉ?
var add = function add(x, y) {
return x + y;
};
console.log(add(2, 5));
μ΄λ js μμ§μ΄ μ½λμ λ¬Έλ§₯μ λ°λΌ λμΌν ν¨μ 리ν°λ΄μ ννμμ΄ μλ λ¬Έλ² μ μΈλ¬ΈμΌλ‘ ν΄μνλ κ²½μ°μ ννμμΈ λ¬ΈμΈ ν¨μ 리ν°λ΄ ννμμΌλ‘ ν΄μνλ κ²½μ°κ° μκΈ° λλ¬Έμ΄λ€.
{}μ΄ λ¨λ μΌλ‘ μ‘΄μ¬νλ©΄ jsμμ§μ {}λ₯Ό λΈλ‘λ¬ΈμΌλ‘ ν΄μνλ€. λ§μ½ νκ° λμ(νΌμ°μ°μ)λΌλ©΄ κ°μ²΄ 리ν°λ΄λ‘ ν΄μνλ€.
// κΈ°λͺ
ν¨μ 리ν°λ΄μ λ¨λ
μΌλ‘ μ¬μ©νλ©΄ ν¨μ μ μΈλ¬ΈμΌλ‘ ν΄μλλ€.
// ν¨μ μ μΈλ¬Έμμλ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€.
function foo() { console.log('foo'); }
foo(); // foo
// ν¨μ 리ν°λ΄μ νΌμ°μ°μλ‘ μ¬μ©νλ©΄ ν¨μ μ μΈλ¬Έμ΄ μλλΌ ν¨μ 리ν°λ΄ ννμμΌλ‘ ν΄μλλ€.
// ν¨μ 리ν°λ΄μμλ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€.
(function bar() { console.log('bar'); })
bar(); // ReferenceError : bar is not defined
ν¨μ μ΄λ¦μ ν¨μ λ°λ λ΄μμλ§ μ°Έμ‘°ν μ μλ μλ³μλ€. λ°λΌμ barμ κ²½μ° μΈλΆμμ νΈμΆν μλ³μκ° μκΈ° λλ¬Έμ μ€νν μ μλ€. κ·Έλ λ€λ©΄ μλλ fooλ νΈμΆν μ μμ΄μΌ νλ€. κ·Έ μ΄μ λ fooλΌλ μ΄λ¦μΌλ‘ μλ³μλ₯Ό μ μΈν μ λ μκ³ ν λΉν μ λ μλ€. κ·Έλ μ§λ§ js μμ§μ μ묡μ μΌλ‘ fooλΌλ μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νλ€.
js μμ§μ ν¨μ μ μΈλ¬Έμ ν΄μν΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€. μ΄ λ μλ³μκ° μκΈ° λλ¬Έμ μμ±λ ν¨μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μμΌλ―λ‘ ν¨μ μ΄λ¦κ³Ό λμΌν μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νκ³ , κ±°κΈ°μ ν¨μ κ°μ²΄λ₯Ό ν λΉνλ€.
ν¨μλ ν¨μ μ΄λ¦μ νΈμΆνλ κ²μ΄ μλλΌ ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ νΈμΆνλ€.
μμ var addμλjsμμ§μ΄ μ묡μ μΌλ‘ μμ±ν μλ³μ addκ° λ΄κΈ°κΈ° λλ¬Έμ ν λΉν μ μλ κ²μ΄λ€.
π₯₯ ν¨μ ννμ
μΌκΈ κ°μ²΄ : κ°μ μ±μ§μ κ°λ κ°μ²΄λ₯Ό λ§νλ€.
- jsμ ν¨μκ° μΌκΈ κ°μ²΄μ΄λ€. μ¦, ν¨μλ₯Ό κ°μ²λΌ μμ λ‘κ² μ¬μ©ν μ μλ€.
ν¨μ ννμ : ν¨μκ° μΌκΈ κ°μ²΄λΌλ μ μ μ΄μ©ν΄ ν¨μ 리ν°λ΄λ‘ μμ±ν κ°μ²΄λ₯Ό λ³μμ ν λΉνλ μ μ λ°©μμ λ§νλ€.
- ν¨μ ννμμ μ΅λͺ ν¨μλ‘ μμ±νλ κ²μ΄ μΌλ°μ μ΄λ€.
var add = function foo (x, y) {
return x + y;
};
// ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ νΈμΆνλ€.
console.log(add(2, 5)); // 7
// ν¨μ μ΄λ¦μ ν¨μ λͺΈμ²΄ λ΄λΆμμλ§ μ ν¨ν μλ³μμ΄κΈ° λλ¬Έμ μλ¬λ₯Ό λ°μνλ€.
console.log(foo(2, 5)); // ReferenceError: foo is not defined
ν¨μ μ μΈλ¬Έμ ννμμ΄ μλ λ¬Έμ΄κ³ , ν¨μ ννμμ ννμμΈ λ¬Έμ΄λ€.
β μ μΈλ¬Έ μ체λ μ μΈμ΄κΈ° λλ¬Έμ νκ°λμ§ μμ ννμμ΄ μλ λ¬Έμ΄κ³ , μΌκΈ κ°μ²΄μ΄κΈ° λλ¬Έμ κ°μΌλ‘ μ¬μ©ν μ μμ΄ ν¨μ ννμμλ κ°μΌλ‘ μ¬μ©ν΄μ ννμμΈ λ¬Έμ΄ λλ κ² κ°λ€.
π₯₯ ν¨μ μμ± μμ κ³Ό ν¨μ νΈμ΄μ€ν
console.dir(add); // f add(x, y)
console.dir(sub); // undefined
console.log(add(2, 5)); // 7
console.log(add(2, 5)); // TypeError: sub is not a function
function add(x, y) {
return x + y;
}
var sub = function(x, y) {
return x - y;
}
var ν€μλλ‘ μ μΈλ λ³μλ undefinedλ‘ μ΄κΈ°νλκ³ , ν¨μ μ μΈλ¬Έμ ν΅ν΄ μ묡μ μΌλ‘ μμ±λ μλ³μλ ν¨μ κ°μ²΄λ‘ μ΄κΈ°νλλ€. λ³μ ν λΉλ¬Έμ κ°μ ν λΉλ¬Έμ΄ μ€νλλ μμ , μ¦ λ°νμμ νκ°λλ€. λ°λΌμ ν¨μ ννμλ ν΄λΉ μ½λλ₯Ό μ€νλ λ νκ°λμ΄ ν¨μ κ°μ²΄κ° λλ€. λ°λΌμ ν¨μ ννμμΌλ‘ ν¨μλ₯Ό μ μνλ©΄ ν¨μ νΈμ΄μ€ν μ΄ λ°μνλ κ²μ΄ μλλΌ λ³μ νΈμ΄μ€ν μ΄ λ°μνλ κ²μ΄λ€
- ν¨μ νΈμ΄μ€ν μ ν¨μλ₯Ό νΈμΆνκΈ° μ μ μ μΈνλ€λ κ·μΉμ 무μνκΈ° λλ¬Έμ ν¨μ μ μΈλ¬Έ λμ ν¨μ ννμμ μ¬μ©ν κ²μ κΆμ₯νλ€.
π₯₯ Function μμ±μ ν¨μ
λΉνΈμΈ ν¨μμΈ Futioon μμ±μ ν¨μλ‘ ν¨μλ₯Ό μμ±νλ λ°©μμ μΌλ°μ μ΄μ§λ μκ³ λ°λμ§νμ§λ μλ€. ν΄λ‘μ λ₯Ό μμ±νμ§λ μλ λ±, ν¨μ μ μΈλ¬Έμ΄λ ν¨μ ννμμΌλ‘ μμ±ν ν¨μμ λ€λ₯΄κ² λμνλ€.
console.dir(add); // f add(x, y)
console.dir(sub); // undefined
console.log(add(2, 5)); // 7
console.log(add(2, 5)); // TypeError: sub is not a function
function add(x, y) {
return x + y;
}
var sub = function(x, y) {
return x - y;
}
π₯₯ νμ΄ν ν¨μ
νμ΄ν ν¨μλ κΈ°μ‘΄μ ν¨μλ³΄λ€ ννμ λλΆμ΄ λ΄λΆ λμ λν κ°λ΅νλμ΄ μλ€. κΈ°μ‘΄ ν¨μμ λ€λ₯Έ μ λ€μ λ€μκ³Ό κ°λ€.
- μμ±μ ν¨μλ‘ μ¬μ©ν μ μλ€.
- this λ°μΈλ© λ°©μμ΄ λ€λ₯΄λ€
- prototype νλ‘νΌν°κ° μλ€.
- arguments κ°μ²΄λ₯Ό μμ±νμ§ μλλ€.
μ°Έκ³ : λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive
λΉμ μ΄ μ’μν λ§ν μ½ν μΈ
μμ€ν κ³΅κ° κ°μ¬ν©λλ€