[μλ°μ€λ¦½νΈ(JavaScript )] 12. ν¨μμ λ€μν νν (μ¦μ μ€ν ν¨μ, λ΄λΆ ν¨μ, callback λ±)
π‘ 1. ν¨μμ λ€μν νν
- ν¨μλ μ¬λ¬ κ°μ§ ννλ₯Ό κ°μ§κ³ μκ³ , κ·Έ ννμ λ°λΌ λΆλ₯΄λ λͺ μΉμ΄ λ€λ¦ λλ€. μ΄λ² κΈμμλ 4κ°μ§ ννμ λν΄μ μκΈ°ν΄λ³΄κ² μ΅λλ€.
- μ¦μ μ€ν ν¨μ
- λ΄λΆ ν¨μ
- μ¬κ· ν¨μ
- μ½λ°±(callback) ν¨μ
π£ 1.1 μ¦μ μ€ν ν¨μ
- ν¨μκ° μ μλ¨κ³Ό λμμ μ€νμ΄ λλ ν¨μλ₯Ό μ¦μ μ€ν ν¨μ(IIFE, Immediately Invoke Function Expression)λΌκ³ ν©λλ€.
- μ¦μ μ€ν ν¨μλ μ΅μ΄ ν λ²λ§ νΈμΆμ΄ λκ³ λ€μ νΈμΆν μκ° μμ΅λλ€. κ·Έλμ μ£Όλ‘ μ΄κΈ°ν μ²λ¦¬μ μ¬μ©μ΄ λ©λλ€.
// κΈ°λͺ
μ¦μ μ€ν ν¨μ
(function hi() {
console.log('Hello!');
}());
hi(); //error -> hi is not defined : hiλΌλ ν¨μλ μ¦μ μ€νλ ν μ¬λΌμ§λ―λ‘ μ¬μ¬μ©μ΄ λΆκ°νλ€.
----------------------------------------------------------------------------------------------
// μ΅λͺ
μ¦μ μ€ν ν¨μ
let sum;
(function() {
sum = 20;
}());
console.log(sum); // 20
π£ 1.2 λ΄λΆ ν¨μ
- ν¨μ λ΄λΆμ μ μΈλ ν¨μλ₯Ό λ΄λΆ ν¨μ(Inner Function)λΌ ν©λλ€.
function animal(specie, name) {
let animalInfo = {
specie : specie,
name : name
}
function introduce() {
console.log(`Hello! My name is ${name}, I'm ${specie}`);
}
introduce();
}
animal('dog', 'κΎΈκΈ°'); // Hello! My name is κΎΈκΈ°, I'm dog
- μ μμ μμ animalμ λΆλͺ¨ ν¨μμ΄κ³ , introduceλ λ΄λΆ ν¨μκ° λ©λλ€.
- λΆλͺ¨ ν¨μ μΈλΆμμλ λ΄λΆ ν¨μμ μ κ·Όν μ μμ΅λλ€.
function sayHi(name){
function hi(){
console.log('Hi! ' + name);
}
hi();
}
sayHi('μλ') // Hi! μλ
hi(); / error -> hi is not defined : λΆλͺ¨ν¨μ μΈλΆμμ λ΄λΆ ν¨μμ μ κ·Ό ν μ μλ€.
π£ 1.3 μ¬κ· ν¨μ
- μ¬κ· ν¨μ(Recusice Function)λ μκΈ° μμ μ νΈμΆνλ ν¨μλ₯Ό λ»ν©λλ€.
- μ¬κ· ν¨μλ μμ μ 무νν μ°μ νΈμΆνλ―λ‘ νμΆ μ‘°κ±΄μ κ±Έμ΄ λμ§ μμΌλ©΄, 무ν νΈμΆμ΄ λμ΄ stackoverflow μλ¬κ° λ°μν©λλ€.
function minus(n) {
if(n == 0) {
console.log('End');
return n;
}
console.log(n-1);
return minus(n - 1);
}
minus(5);
// 4
// 3
// 2
// 1
// 0
// End
// νμΆ μ‘°κ±΄μ΄ μλ κ²½μ°
function minus(n) {
return minus(n - 1);
}
minus(5); //error -> Maximum call stack size exceeded
- μ¬κ· ν¨μκ° νλ κΈ°λ₯μ λ°λ³΅λ¬ΈμΌλ‘λ κ°λ₯νλ―λ‘, μ΅λν λ°λ³΅λ¬Έμ μ¬μ©νλ κ²μ μΆμ²ν©λλ€. μ¬κ· ν¨μλ₯Ό μ λͺ¨λ₯΄κ³ μ¬μ©ν κ²½μ° stackoverflow μλ¬κ° μ λ°μνλ―λ‘ μ‘°μ¬ν΄μΌ λ©λλ€.
π£ 1.4 μ½λ°±(callback) ν¨μ
- μ½λ°± ν¨μλ ν¨μλ₯Ό νΉμ μ΄λ²€νΈκ° λ°μνμ λ μμ€ν μ μν΄μ νΈμΆλλ ν¨μλ₯Ό λ»ν©λλ€.
- λ§μ΄ μ¬μ©λλ κ³³μ μ΄λ²€νΈ νΈλ€λ¬μ λλ€. (ex:ν΄λ¦ μ ν¨μ νΈμΆ, μν° μ ν¨μ νΈμΆ λ±λ±)
<!DOCTYPE html>
<html>
<body>
<button id="myButton">Click me</button>
<script>
var button = document.getElementById('myButton');
// buttonμ΄ ν΄λ¦λμμ λ, ν¨μλ₯Ό μ€ν.
button.addEventListener('click', function() {
alert('λ²νΌμ΄ ν΄λ¦λμ΅λλ€!');
});
</script>
</body>
</html>
// 1μ΄ ν ν¨μ μ€ν
setTimeout(function () {
console.log('1μ΄ ν μΆλ ₯λλ€.');
}, 1000);
- μ½λ°± ν¨μλ μ£Όλ‘ λΉλκΈ°μ μ²λ¦¬μμ μ¬μ©λ©λλ€. λΉλκΈ°μ μ²λ¦¬λ μ²λ¦¬κ° μ’ λ£λλ©΄ νΈμΆλ ν¨μ(μ½λ°± ν¨μ)λ₯Ό 미리 맀κ°λ³μμ μ λ¬ν΄λ¨λ€κ° μ²λ¦¬κ° μ’ λ£λλ©΄ μ½λ°± ν¨μλ₯Ό νΈμΆνλ λ°©μμ λλ€.
function afterCall(){
setTimeout(function(){
console.log('1μ΄ν μ€νλ μ½λ');
});
}
afterCall();
console.log('λ λ¦κ² νΈμΆνλλ° λ¨Όμ λμ΄');
// λ λ¦κ² νΈμΆνλλ° λ¨Όμ λμ΄
// 1μ΄ν μ€νλ μ½λ
π μ 리
- ν¨μμλ μ¬λ¬ κ°μ§ μ’ λ₯κ° μλ€.
- μ¦μ μ€ν ν¨μλ μ μΈκ³Ό λμμ μ€νμ΄ λκ³ , μ¬μ¬μ©μ΄ λΆκ°νλ€. μ΄κΈ°νμ μ£Όλ‘ μ¬μ©λλ€
- λ΄λΆ ν¨μλ ν¨μ λ΄λΆμ μ μΈλ ν¨μλ₯Ό λ» νλ€. λΆλͺ¨ ν¨μ μΈλΆμμ λ΄λΆ ν¨μ νΈμΆμ λΆκ°νλ€.
- μ¬κ· ν¨μλ μκΈ° μμ μ νΈμΆνλ ν¨μμ΄λ€. νμΆ μ‘°κ±΄μ μ£Όμ§ μμΌλ©΄ 무ν νΈμΆμ ν΄μ μ€λ₯κ° λλ€.
- μ½λ°± ν¨μλ μ΄λ ν μ²λ¦¬κ° μ΄λ£¨μ΄μ§ νμ μ€νλλ ν¨μμ΄λ€. μ£Όλ‘ μ΄λ²€νΈ νΈλ€λ¬μμ μ¬μ©λλ€.
κΈ΄ κΈ μ½μ΄μ£Όμ
μ κ°μ¬ν©λλ€ :)
νλ¦° λ΄μ©μ΄ μκ±°λ, λ§λΆμΌ λ΄μ©μ΄ μλ€λ©΄ μΈμ λ μ§ λκΈ λ¬μμ£ΌμΈμ!
μ κΈμ΄ μ‘°κΈμ΄λλ§ μ½μΌμ λΆλ€μκ² λμμ΄ λλλ‘ λ
Έλ ₯νκ² μ΅λλ€
λ€μ νΈμ 봬μ~