Β ν¨μλ μΌλ ¨μ κ³Όμ μ statement
λ‘ κ΅¬ννκ³ μ½λ λΈλ‘μΌλ‘ κ°μΈ νλμ μ€ν λ¨μλ‘ μ μν κ²μ΄λ€. ν¨μλ μ
λ ₯μ λ°μ μΆλ ₯μ λ΄λ³΄λ΄λλ°, μ΄λ ν¨μ λ΄λΆλ‘ μ
λ ₯μ μ λ¬λ°λ λ³μλ₯Ό 맀κ°λ³μ(parameter
), μ
λ ₯μ μΈμ(argument
), μΆλ ₯μ λ°νκ°(return value
)μ΄λΌ νλ€.
ν¨μλ ν¨μ μ μ(function definition
)λ₯Ό ν΅ν΄ μμ±νκ³ ν¨μ νΈμΆ(function call
)μ νλ©΄ μ½λ λΈλ‘μ λ΄κΈ΄ statementλ€μ΄ μΌκ΄μ μΌλ‘ μ€νλκ³ λ°νκ°μ λ°ννλ€.
π‘ ν¨μλ₯Ό μ¬μ©νλ μ΄μ ?
- ν¨μλ λͺ λ²μ΄λ νΈμΆν μ μμ΄ μ½λ μ¬μ¬μ© μΈ‘λ©΄μμ μ μ©νλ€.
- μ μ§λ³΄μμ νΈμμ±μ λμ΄κ³ μ€μλ₯Ό μ€μ¬ μ½λμ μ λ’°μ±μ λμΈλ€.
- μ μ ν ν¨μ μ΄λ¦μ λΆμ΄λ©΄ λ΄λΆ μ½λλ₯Ό μ΄ν΄νμ§ μκ³ λ μν μ νμ ν μ μκΈ° λλ¬Έμ μ½λμ κ°λ μ±μ ν₯μμν¨λ€.
β μ΄μμ μΈ ν¨μλ ν κ°μ§ μΌλ§ νκ³ κ°κΈμ μκ² λ§λλ κ²μ΄ μ’λ€.
β 맀κ°λ³μλ μ΅λ 3κ° μ΄μμ λμ§ μλ κ²μ κΆμ₯νλ€.
Β ν¨μ μ μΈλ¬Έμ ν¨μ 리ν°λ΄κ³Ό ννκ° λμΌνμ§λ§ 리ν°λ΄κ³Ό λ¬λ¦¬ ν¨μ μ΄λ¦μ μλ΅ν μ μλ€. λν, ν¨μ μ μΈλ¬Έμ ννμμ΄ μλλΌ λ¬Έμ΄λ€.
// function declaration
function add(a, b) {
return a + b;
}
console.dir(add); // console.dirμ ν¨μ κ°μ²΄μ νλ‘νΌν°κΉμ§ μΆλ ₯
console.log(add(4, 6));
[μ€νκ²°κ³Ό]
[Function: add]
10
π‘ ννμμΈ λ¬Έ VS ννμμ΄ μλ λ¬Έ
ννμμΈ λ¬Έμ κ°μΌλ‘ νκ°λλ―λ‘ λ³μμ ν λΉν μ μλ€. ννμμ΄ μλ λ¬Έμ κ°μΌλ‘ νκ°λμ§ μμ λ³μμ ν λΉνλ©΄ μλ¬κ° λ°μνλ€.
Β ν¨μλ κ°μ μ±μ§μ κ°λλ°, μ΄λ¬ν κ°μ²΄λ₯Ό μΌκΈ κ°μ²΄(first-class object
)λΌκ³ νλ€. ν¨μ κ°μ²΄λ₯Ό λ³μμ ν λΉνλ λ°©μμ ν¨μ ννμμ΄λΌκ³ νλ€.
// function expression
var sub = function (x, y) { // ν¨μ ννμμ ν¨μ 리ν°λ΄μ ν¨μ μ΄λ¦μ μλ΅νλ κ²μ΄ μΌλ°μ
return x - y;
};
console.log(sub(10, 5));
[μ€νκ²°κ³Ό]
5
Β ν¨μ μ μΈλ¬ΈμΌλ‘ μ μν ν¨μλ μ μΈλ¬Έ μ΄μ μ νΈμΆν μ μλ€. κ·Έλ¬λ ν¨μ ννμμΌλ‘ μ μν ν¨μλ ννμ μ΄μ μ νΈμΆν μ μλ€.
// function declaration VS function expression
// function call
console.log(declAdd(4, 6)); // 10
console.log(expAdd(4, 6)); // TypeError
function declAdd(x, y) {
return x + y;
}
var expAdd = function (x, y) {
return x + y;
};
ν¨μ μ μΈλ¬Έμ λ°νμ(runtime) μ΄μ μ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄ ν¨μ κ°μ²΄κ° λ¨Όμ μμ±λκ³ ν¨μ μ΄λ¦κ³Ό λμΌν μ΄λ¦μ μλ³μλ₯Ό μ묡μ μΌλ‘ μμ±νκ³ κ°μ²΄λ₯Ό ν λΉνλ€. κ·Έλμ ν¨μ μ μΈλ¬Έ μ΄μ μ ν¨μλ₯Ό μ°Έμ‘°ν μ μκ³ νΈμΆν μλ μλ κ²μ΄λ€.
μ΄μ²λΌ ν¨μ μ μΈλ¬Έμ΄ μ½λ μ λλ‘ λμ΄ μ¬λ €μ§ κ²μ²λΌ λμνλ νΉμ§μ ν¨μ νΈμ΄μ€ν
(function hoisting
)μ΄λΌ νλ€.
λ°λ©΄, ν¨μ ννμμμλ λ³μ μ μΈμ΄ λ°νμ μ΄μ μ μ€νλμ΄ undefinedλ‘ μ΄κΈ°νλλ ν¨μ 리ν°λ΄μ ν λΉλ¬Έμ΄ μ€νλλ μμ μ νκ°λλ€. κ·Έλμ ν¨μλ₯Ό ννμλ³΄λ€ λ¨Όμ νΈμΆνλ©΄ undefinedλ₯Ό νΈμΆνλ κ²κ³Ό κ°μΌλ―λ‘ TypeErrorκ° λ°μνκ² λλ κ²μ΄λ€.
π λ³μ μ μΈ
var ν€μλλ₯Ό μ¬μ©ν λ³μ μ μΈμ undefinedλ‘ μ묡μ μΈ μ΄κΈ°νκ° μνλ¨.
Β function ν€μλ λμ νμ΄ν =>
λ₯Ό μ¬μ©ν΄ κ°λ΅νκ² ν¨μλ₯Ό μ μΈν μ μλ€.
// arrow function
const div = (x, y) => x / y;
console.log(div(10, 8));
[μ€νκ²°κ³Ό]
1.25
Β μ¦μ μ€ν ν¨μλ ν¨μ μ μμ λμμ μ¦μ νΈμΆλλλ° λ¨ ν λ²λ§ νΈμΆλλ©° λ€μ νΈμΆν μ μλ€. μΌλ° ν¨μμ²λΌ κ°μ λ°νν μ μκ³ μΈμ μ λ¬λ κ°λ₯νλ€.
// IIFE
(function () {
var x = 8;
var y = 5;
return x * y;
}());
var immed = (function () {
var x = 8;
var y = 5;
return x * y;
}());
console.log(immed);
immed = (function (a, b) {
return a * b;
}(8, 5));
console.log(immed);
[μ€νκ²°κ³Ό]
40
40
μ΄μ²λΌ μ¦μ μ€ν ν¨μ λ΄μ μ½λλ₯Ό λͺ¨μλλ©΄ νΉμλΌλ μ‘΄μ¬νκ³ μλ λ³μλ ν¨μ μ΄λ¦μ μΆ©λμ λ°©μ§ν μ μλ€.
Β μκΈ° μμ μ νΈμΆνλ νμλ₯Ό μ¬κ· νΈμΆ(recursive call
)μ΄λΌκ³ νλ€. μ¬κ· ν¨μλ μ¬κ· νΈμΆμ μννλ ν¨μλ₯Ό λ§νλ©° λ°λ³΅λλ μ²λ¦¬λ₯Ό μν΄ μ¬μ©νλ€.
μ¬κ· ν¨μλ μμ μ 무ν μ¬κ· νΈμΆνλ―λ‘ λ°λμ ν¨μ λ΄μ νμΆ μ‘°κ±΄(escape condition
)μ μ€μ ν΄μΌ νλ€. νμΆ μ‘°κ±΄μ΄ μμΌλ©΄ stack overflow μλ¬κ° λ°μνλ€.
// recursive function
function countDown(num) {
if (num === 0) return ; // νμΆ μ‘°κ±΄
console.log(num);
countDown(num - 1);
}
countDown(5);
[μ€νκ²°κ³Ό]
5
4
3
2
1
ex) ν©ν λ¦¬μΌ μ¬κ· ν¨μ
function fact(n) {
if (n === 1) return 1;
return n * fact(n - 1);
}
>
console.log(`1! = ${fact(1)}`);
console.log(`2! = ${fact(2)}`);
console.log(`3! = ${fact(3)}`);
console.log(`4! = ${fact(4)}`);
console.log(`5! = ${fact(5)}`);
>
[μ€νκ²°κ³Ό]
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
β μ¬κ· ν¨μλ λ°λ³΅λ¬Έ μμ΄ λ°λ³΅λλ μ²λ¦¬λ₯Ό ꡬνν μ μμΌλ, 무ν 루νμ λΉ μ§ μ μμΌλ―λ‘ μ£Όμν΄μΌ νλ€. λλ¬Έμ λ°λ³΅λ¬Έλ³΄λ€ μ§κ΄μ μΌλ‘ μ΄ν΄νκΈ° μ¬μΈ λλ§ νμ μ μΌλ‘ μ¬μ©νλ κ²μ΄ μ’λ€.
Β μ€μ²© ν¨μλ ν¨μ λ΄λΆμ μ μλ ν¨μλ₯Ό λ»νλ©°, λ΄λΆ ν¨μ(inner function
)λΌκ³ λ νλ€. κ·Έλ¦¬κ³ μ€μ²© ν¨μλ₯Ό κ°μΈκ³ μλ ν¨μλ₯Ό μΈλΆ ν¨μ(outer function
)λΌκ³ λΆλ₯Έλ€. μ€μ²© ν¨μλ μΈλΆ ν¨μ λ΄μμλ§ νΈμΆν μ μλ€.
// nested function
function outer() { // outer function
var a = 5;
function inner() { // inner function
var b = 3;
console.log(a + b);
}
inner();
}
outer();
[μ€νκ²°κ³Ό]
8
Β ν¨μμ 맀κ°λ³μλ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μμ λ΄λΆλ‘ μ λ¬λλ ν¨μλ₯Ό μ½λ°± ν¨μ(callback function
)λΌκ³ νλ€. λν 맀κ°λ³μλ₯Ό ν΅ν΄ ν¨μ μΈλΆμμ μ½λ°± ν¨μλ₯Ό μ λ¬λ°μ ν¨μλ₯Ό κ³ μ°¨ ν¨μ(HOF, Higher-Order Function
)λΌκ³ λΆλ₯Έλ€.
// callback function
function odd(num, cb) {
for (i = 1; i < num; i++) {
cb(i);
}
}
var high = function (i) {
if (i % 2 !== 0) console.log(i);
};
odd(10, high);
[μ€νκ²°κ³Ό]
1
3
5
7
9
μ μ½λμμμ²λΌ odd ν¨μ λ°λ³΅λ¬Έ λ΄λΆμμ λ€λ₯Έ μΌμ νκ³ μΆλ€λ©΄ ν¨μλ₯Ό μλ‘κ² μ μν΄μΌ νμ§λ§ μ½λ°± ν¨μλ₯Ό μ¬μ©νλ©΄ λΆλ¦¬κ° κ°λ₯νλ€.
ν¨μμ λ³νμ§ μλ 곡ν΅μ μΈ λ‘μ§(= odd)μ 미리 μ μν΄ λκ³ κ²½μ°μ λ°λΌ λ³κ²½λλ λ‘μ§(= high)μ κ³ μ°¨ ν¨μμ κ°μ΄ μΈλΆμμ μ λ¬λ°μΌλ©΄ λ§€λ² ν¨μλ₯Ό μ μν΄μΌ νλ λ²κ±°λ‘μμ μ€μΌ μ μλ€.
I liked the idea, it's expected that all this luxury will be from this beautiful game Candy Crush