
ν¨μλ JavaScriptμ ν΅μ¬ κ°λ μ΄λ€.
μ¬μ€ ν¨μκ° μ€μν κ²μ λͺ¨λ₯΄λ μ¬λμ μμ κ² κ°λ€.
codeλ₯Ό μ¬μ¬μ©ν΄μ μ€ν ν¨μ¨μ λμ΄κ³ , μ μ§λ³΄μκ° μ¬μμ§κ³ , νΈμμ±κ³Ό μ λ’°μ±μ΄ λμμ§λ€.
본격μ μΌλ‘ ν¨μμ λν΄ μμ보μ.
μ¬λ μΈμ΄μμλ ν¨μλ, μ λ ₯κ°μ λ°μ μΆλ ₯κ°μ λ°ννλ 맀컀λμ¦μ λ°λ₯Έλ€.
JavaScriptμμλ μμΈλ μλλ°,
μ
λ ₯κ°μΈ argumentλ₯Ό λ³μ parameterλ‘ λ°μμ, μΆλ ₯κ°μΈ return valueλ₯Ό λ°ννλ€.
// (x, y) : parameter
function add (x, y) { // μ μ
return x + y; // x + y : return value
}
...
add (1, 3); // 1, 3 : argument // νΈμΆ
κ°λ¨ν ν¨μμ ννλ μμμΌλ,
ν¨μλ₯Ό μμ±νκ³ μ¬μ©νλ λ°©λ²μ λν΄ λ μμ보μ.
JavaScriptμ ν¨μλ, κ°μ²΄λ€.
νμ§λ§ μ΄λ₯Ό νΈμΆν μ μλ€λ μ μμ μΌλ° κ°μ²΄μμ μ°¨μ΄κ° μλ€.
λ€μμ ν¨μ 리ν°λ΄μ ꡬμ±μμλ€μ μ 리ν νλ€.
| ꡬμ±μμ | μ€λͺ |
|---|---|
| ν¨μ μ΄λ¦ | 1. ν¨μ μ΄λ¦: μλ³μ (λ€μ΄λ° κ·μΉ μ€μν΄μΌν¨) |
| 2. ν¨μ μ΄λ¦ : body λ΄μμλ§ μ°Έμ‘° κ°λ₯ | |
| 3. ν¨μ μ΄λ¦ : μλ΅ κ°λ₯ : 무λͺ /μ΅λͺ ν¨μλΌκ³ ν¨ | |
| λ§€κ°λ³μ λͺ©λ‘ | 0κ° μ΄μμ λ§€κ°λ³μ, ()λ‘ κ°μΈκ³ ,λ‘ κ΅¬λΆ |
| ν¨μ νΈμΆμ μμλλ‘ μΈμ ν λΉ. | |
| λ§€κ°λ³μ : body λ΄μμ λ³μμ λμΌν μ·¨κΈ (λ€μ΄λ° κ·μΉ μ€μ) | |
| body | ν¨μ νΈμΆμ μ€νλ¬Έλ€μ μ μν΄λ νλμ code block |
| ν¨μ νΈμΆμ μν΄ μ€νλ¨ |
ν¨μλ₯Ό νΈμΆνκ³ μ¬μ©νκΈ°μ μμ, μ°μ ν¨μ μ μλ₯Ό ν΄μΌνλ€.
ν¨μλ₯Ό μ μνλ λ°©λ²μ λ€κ°μ§κ° μλ€.
function add (x, y) {
return x + y;
}
μ°λ¦¬κ° ν¨μμ κ°λ μμ μ΄ν΄λ³Έ λ°λ‘ κ·Έ λ°©μμ΄λ€.
μ΄λ ν¨μ 리ν°λ΄κ³Ό λμΌν ννμ΄μ§λ§, ν¨μ μ μΈλ¬Έμμλ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€.
ν¨μ μ μΈλ¬Έμ, ννμμ΄ μλ "λ¬Έ"μ΄λΌλ κ±Έ κΈ°μ΅νμ.
(consoleμμ μ΄λ₯Ό μ€ννλ©΄ μλ£κ° undefinedκ° μΆλ ₯λλ€.)
λλ¬Έμ ν¨μ μ μΈλ¬Έμ λ³μμ ν λΉν μ μλ€.
JavaScriptλ μμ±λ ν¨μλ₯Ό νΈμΆνκΈ° μν΄, ν¨μ μ΄λ¦κ³Ό λμΌν μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νλ€.
κ·Έλ¦¬κ³ ν΄λΉ μλ³μμ ν¨μ κ°μ²΄λ₯Ό ν λΉνκ³ ,
ν¨μλ₯Ό νΈμΆν λλ ν¨μ μ΄λ¦μ΄ μλ, ν¨μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μλ‘ νΈμΆνλ€.
let add = function add (x, y) {
return x + y;
}
JavaScript μμ§μ, ν¨μ μ μΈλ¬Έμ μ΄μκ°μ΄ λ³νν΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€λ κ²μ΄λ€.
κ·Έλ°λ° λ°λ‘ μλμ ν¨μ ννμμ 보면,,,,, λκ°μ΄ μκ²Όλ€.
κ·Έλ¬λκΉ JavaScript μμ§μ, ν¨μ μ μΈλ¬Έμ ν¨μ ννμμΌλ‘ λ³νν΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€.
(μ μΈλ¬Έκ³Ό ννμμ΄ μ νν λμΌνκ² λμνλ κ²μ μλλ€.)
let add = function (x, y) {
return x + y;
}
JavaScriptμ ν¨μλ κ°μ΄ λ μλ μκ³ , λ°°μ΄μ μμκ° λ μλ μλ€.
μ΄λ κ² κ°μ μ±μ§μ κ°λ κ°μ²΄λ₯Ό μΌκΈ κ°μ²΄ λΌκ³ λΆλ₯Έλ€.
(JavaScript ν¨μλ μΌκΈ κ°μ²΄λ€.)
-> ν¨μ 리ν°λ΄λ‘ μμ±ν ν¨μ κ°μ²΄λ₯Ό λ³μμ ν λΉν μ μκ³ , μ΄λ° μ μ λ°©μμ ν¨μ ννμμ΄λΌκ³ νλ€.
ν¨μ ννμμ ν¨μ 리ν°λ΄μμλ, ν¨μ μ΄λ¦μ λλΆλΆ μλ΅νλ€.
ν¨μ μ μΈλ¬Έκ³Ό ν¨μ ννμμ μ°¨μ΄κ° μλ λ― νμ§λ§,,,
μ μΈλ¬Έμ 'ννμμ΄ μλ λ¬Έ'μ΄κ³ ννμμ 'ννμμΈ λ¬Έ'μ΄λΌλ μ μμ μ°¨μ΄κ° μμμ κΈ°μ΅νμ.
let add = new Function ('x', 'y', 'return x + y');
μ¬μ€ μ΄ λ°©μμ, μΌλ°μ μ΄μ§λ λ°λμ§νμ§λ μμ λ°©μμ΄λΌκ³ νλ€.
μ μΈλ¬Έ, ννμμΌλ‘ μ μν ν¨μμλ μ°¨μ΄μ μ΄ μλ€.
κ·Έλ¬λ μμ§ μ΄ν΄λ³΄μ§ μλ λΆλΆμμ μ°¨μ΄μ μ΄ μμΌλ, μ§κΈμ κ·Έλ₯ μ°¨μ΄μ μ΄ μλ€λ μ λλ§ μμλμ.
let add = (x, y) => x + y;
function ν€μλ λμ => λ₯Ό μ¬μ©νλ€.
μ’ λ κ°λ΅ν λ°©λ²μ΄λ€.
μκΈ΄ κ²λ§ κ°λ΅ν κ² μλκ³ , λμλ κ°λ΅ν λμ΄μλ€κ³ νλ€!
ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μλ, μ μΈλ¬Έ μ΄μ μ νΈμΆμ΄ κ°λ₯νλ€.
νμ§λ§ ν¨μ ννμμΌλ‘ μ μν ν¨μλ, ννμ μ΄μ μ νΈμΆμ΄ λΆκ°λ₯νλ€.
μ΄λ° μ°¨μ΄κ° μκΈ°λ μ΄μ κ° λκΉ?
λ ν¨μμ μμ± μμ μ΄ λ€λ₯΄κΈ° λλ¬Έμ΄λ€.
μμ λ³μμ λν΄ μ΄ν΄λ³Ό λ, JavaScriptμ λͺ¨λ μ μΈμ runtime μ΄μ μ λ¨Όμ μ€νλλ€κ³ νλ€.
ν¨μ μ μΈλ¬Έλ μμΈλ μλ€. ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μλ, κ·Έ κ°μ²΄κ° runtime μ΄μ μ λ¨Όμ μμ±λλ€.
κ·Έλ¬λκΉ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μνλ©΄, ν¨μ νΈμ΄μ€ν
μ΄λΌλ νΉμ±μ κ°μ§λ€.
νμ§λ§ ν¨μ ννμμΌλ‘ ν¨μλ₯Ό μ μνλ©΄, ν¨μ νΈμ΄μ€ν
μ΄ μλ λ³μ νΈμ΄μ€ν
μ΄ λ°μνλ€.
λλ¬Έμ ννμ μ΄μ μ ν¨μλ₯Ό μ°Έμ‘°νλ©΄ undefinedλ‘ νκ°λλ€.
ν¨μ ννμμΌλ‘ ν¨μλ₯Ό μ μνλ€λ©΄, λ°λμ ννμ μ΄νμ ν¨μλ₯Ό μ°Έμ‘°νλλ‘ νμ.
(JavaScriptμ ν¨μ μ μΈλ¬Έμ΄ κ°μ§λ ν¨μ νΈμ΄μ€ν
μ νΌνκΈ° μν΄,
ν¨μ ννμμΌλ‘ μ μνλ κ²μ΄ κΆμ₯λλ€κ³ νλ€.)
add = (x, y);
ν¨μ νΈμΆμμλ μ§μ μ μ΄ν΄λ³Έ ν¨μ μμ±μμ κ³Ό νΈμ΄μ€ν
μ΄λΌλ νΉμ±μ μ κ³ λ €νλ κ²μ΄ μ€μνλ€.
λ§€κ°λ³μμ κ°μλ μ΄λμ λκ° μ’μκΉ?
ν¨μλ ν κ°μ§ μΌμ νλλ‘, κ°λ₯ν κ°μ₯ μκ² λ§λλ κ²μ΄ μ΄μμ μ΄λ€.
μ΄μμ μΈ λ§€κ°λ³μμ κ°μλ 0κ°μ΄λ, κ°λ°μλ€μ μ£Όλ‘ 2κ°, λ§μΌλ©΄ 3κ°κΉμ§μ λ§€κ°λ³μλ₯Ό μ¬μ©νλ€κ³ νλ€.
Imediately Invoked function expression
(function () {
let a = 3;
let b = 5;
return a + b;
}());
μ£Όλ‘ μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ€.
λ¬Όλ‘ μ΄λ¦μ λΆμΌ μλ μμ§λ§,, μ¦μ μ€ννλ κ²μ΄ λͺ©μ μΈ ν¨μμ΄κΈ° λλ¬ΈμΈλ―νλ€.
μ¦μ μ€ν ν¨μλ νμ κ·Έλ£Ήμ°μ°μμΈ ()λ‘ κ°μΈμ£Όλλ‘ νμ.
(κ·Έλ¬μ§ μμΌλ©΄ errorκ° λ°μνλ€..)
recursive function
function countdown(n) {
if (n < 0) return;
console.log(n);
countdown(n-1); // μ¬κ· νΈμΆ
}
countdown(n);
μκΈ° μμ μ 무ν νΈμΆνλ ν¨μμ΄λ€.
λλ¬Έμ 쑰건μ λ§μ‘±νλ©΄ νμΆν μ μλλ‘, νμΆ μ‘°κ±΄μ λ§λ€μ΄μ€μΌ νλ€.
νμ§λ§ 무ν νΈμΆμ λΉ μ§ μνμ± λλ¬Έμ,,, κΌ νμν λλ§ μ¬μ©νλλ‘ νμ.
nested/inner function
function outer() {
let x = 1;
function inner() {
let y = 3;
console.log(x + y);
}
inner();
}
ν¨μ λ΄λΆμ μ μλ ν¨μλ₯Ό λ§νλ€.
μ¬μ€ μ΄λ κ² ν¨μ μ μΈλ¬ΈμΌλ‘ μ€μ²© ν¨μλ₯Ό λ§λλ κ²μ, ν¨μ νΈμ΄μ€ν λ¬Έμ λ‘ λ°λμ§νμ§ μλ€κ³ νλ€.
λμ€μ μ΄ν΄λ³Ό μ€μ½νμ ν΄λ‘μ μ κΉμ κ΄λ ¨μ΄ μλ€κ³ νλ€.
ν¨μμ λ§€κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μλ₯Ό μ½λ°±ν¨μλΌκ³ λΆλ₯Έλ€.
repeat (5, function(i) {
if (i % 2)
console.log(i);
});
μΈλΆ μνμ μμ‘΄νκ±°λ, λ³κ²½νμ§λ μλ ν¨μλ₯Ό pure functionμ΄λΌκ³ νκ³ ,
κ·Έ λ°λλ₯Ό impure functionμ΄λΌκ³ νλ€.
pure funcμ κ²½μ°, λμΌ μ λ ₯κ°μ΄ λ€μ΄μ€λ©΄ μΈμ λ λμΌν κ°μ λ°ννλ€.
impure funcμ κ²½μ°λ κ·Έλ μ§ μλ€.
μ΄λ₯Ό λΆμν¨κ³Όκ° λ§μ ν¨μλΌκ³ νλλ°, ν¨μμ μΈλΆ μνλ₯Ό λ³κ²½νλ κ²μ λ§νλ€.
μ¦, impure funcλ μΈλΆ μνμ μμ‘΄νκ±°λ μΈλΆ μνλ₯Ό λ³κ²½νλ ν¨μμ΄λ€.
λ€λ₯Έ κ°λ λ³΄λ€ μμμΌ ν κ²λ λ§κ³ ,, μ΄λ ΅μ§ μμμ§λ§ λ΄μ©μ΄ λ§μμ μλμ μ΄μλ€.
μ€μν JavaScript κ°λ μ νλμ© μμκ°λ κ² κ°λ€.
μμΌλ‘λ λμΆ©λμΆ© 곡λΆνμ§ μκ³ κΌΌκΌΌνκ² μμλ΄μΌκ² λ€.