π return function() ν¨μλ₯Ό λ¦¬ν΄ νλ κΈ°λ²μ μ΄λμ μ¬μ©λ κΉ?
μλ°μ€ν¬λ¦½νΈμ ν¨μλ₯Ό 리ν΄νλ ν¨μ
ν΄λ‘μ μμλ 보μκ³ μ°λ¦¬λ μλ°μ€ν¬λ¦½νΈ μ½λ©νλ©΄μ κ°λ ν¨μ μ체λ₯Ό 리ν΄νλ ν¨μλ₯Ό νλ²μ―€μ 보μμ κ²μ΄λ€.
function hello(){
return function world(){
return "Hello Word";
}
}
const a = hello();
// == world()
βμ리λ μκ² λ€. μ¬μ©λ²λ μκ² λ€. κ·Έλ°λ° λ체 μ΄λ¬ν κΈ°λ²μ΄ μ΄λμ μ°μ΄λ건κ°? μ κ΅³μ΄ κ°μ 리ν΄νλ©΄λμ§ ν¨μμμ ν¨μλ₯Ό 리ν΄νλκ°? μ§κΈλΆν° return function() {} μ μ€μ© κΈ°λ²μ μμ보μ.
μΌλ°μ μΈ μ΄λ²€νΈ μ½λ°± ν¨μ λ±λ‘λ²
μ¬κΈ° λ²νΌμ΄ 3κ° μλ μΉλ¬Έμκ° μλ€.
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<button id="c1">C1</button>
<button id="c2">C2</button>
<button id="c3">C3</button>
<script>
</script>
</body>
</html>
μ°λ¦¬λ μ 3κ°μ λ²νΌλ§λ€ λ€μκ³Ό κ°μ΄ μ΄λ²€νΈ 리μ€λλ₯Ό λ±λ‘ν μμ μ΄λ€. addEventListenr λλ²μ§Έ μΈμμλ ν¨μκ° λ€μ΄κ°κΈ° λλ¬Έμ μ΅λͺ
ν¨μλ‘ μ²λ¦¬ν΄μ£Όμλ€.
<body>
<button id="c1">C1</button>
<button id="c2">C2</button>
<button id="c3">C3</button>
<script>
document.getElementById('c1').addEventListener('click', function(){ console.log(1) });
document.getElementById('c2').addEventListener('click', function(){ console.log(1) });
document.getElementById('c3').addEventListener('click', function(){ console.log(1) });
</script>
</body>
μ½λ μ체μ λ¬Έμ λ μμ§λ§ κ°λ§ 보면 μ½λ λ°λ³΅μ΄ λ°μνλ€. λ°λΌμ λμΌν κ²°κ³Όλ₯Ό λ°ννλ ν¨μλ₯Ό λ°μΌλ‘ λΉΌμ 리ν©ν λ§ νλ€. c λΌλ ν¨μλ₯Ό μλ‘ λ§λ€κ³ μ΄λ²€νΈλ¦¬μ€λμ λ±λ‘μν€λ©΄ λλ€. λ€λ§ λͺ¨λ λ€ μλ€μνΌ μ΄λ²€νΈ 리μ€λ μΈμμλ ν¨μ μμ²΄κ° λ€μ΄κ°μΌ νλ€. λ§μΌ ν¨μ μΈμ λΆλΆμ c()λ‘ λ£κ² λλ©΄ 리ν΄κ° μμ²΄κ° λ€μ΄κ°λ κΌ΄μ΄ λκΈ° λλ¬Έμ ν¨μ μ€νμ΄ λμ§ μκΈ° λλ¬Έμ΄λ€.
<script>
function c() {
console.log(1);
}
document.getElementById('c1').addEventListener('click', c);
document.getElementById('c2').addEventListener('click', c);
document.getElementById('c3').addEventListener('click', c);
</script>
μ΄λ²€νΈ μ½λ°±μ 맀κ°λ³μλ₯Ό μ¬μ©ν΄μΌ ν κ²½μ°
κ·Έλ°λ° λ§μΌ μ€νμ΄ λ³κ²½λμ, κ° λ²νΌλ§λ€ λ€λ₯Έ λμμ νλλ‘ κ΅¬ννλ€λ©΄ μ΄λ»κ² ν΄μΌν κΉ? μλ₯Ό λ€μ΄ c1λ²νΌ λλ₯΄λ©΄ 1μ΄ μΆλ ₯λκ² λ§λ€κ³ c3 λ²νΌ λλ₯΄λ©΄ 3μ΄ μΆλ ₯λκ² λ§λ€κ³ μΆλ€. μ΄λ ν¨μμ νλΌλ―Έν°λ₯Ό μ€μ νλΌλ―Έν° λ³μκ°μ μΆλ ₯ν΄μ£Όλ©΄ λλ λ°©λ²μ΄λ€. νμ§λ§ λ¬Έμ λ μ΄λ»κ² μ€κΉ? μ΄λ€.
μλμ κ°μ΄ νλ©΄ μμ λ§νλ€ μΆμ΄ 리ν΄κ°μ λ£μ΄λ²λ¦¬λ κΌ΄μ΄ λλ€. λ²νΌ λλ₯΄μ§λ μμλλ°λ console.log() ν¨μκ° νλ² μ€ννκ³ λ§λ κΈ°μ μ λ³Ό μ μμ κ²μ΄λ€.
function c(n) {
console.log(n);
}
document.getElementById('c2').addEventListener('click', c(2));
μ¦, cλ‘ μ£Όλ©΄ νλΌλ―Έν°λ₯Ό μ€μμκ³ , c(2)λ‘ νλ©΄ ν¨μ μ€νμ΄ μλκ² λλ€. μ λ°©λ²μ΄ μλκ±ΈκΉ? 무μνκ² μ μλ³μλ‘ μ²λ¦¬ν κΉ? λΌκ³ μΆμ§λ§ μ¬μ€ κ°λ¨νλ€.
ν¨μλ₯Ό 리ν΄νλ ν¨μλ₯Ό μ΄μ©ν ν΄λ‘μ
βc()λ‘ μ΄λ²€νΈλ¦¬μ€λ ν¨μμ λ±λ‘νλ©΄ λμμ΄ μ΄μνκ² λλ μ΄μ λ, μ΄λ²€νΈ 리μ€λμλ ν¨μκ° λ±λ‘λλκ² μλλΌ λ¦¬ν΄κ°μ΄ λ£μ΄μ§κΈ° λλ¬Έμ΄λ€. κ·ΈλΌ μ΄ μ리λ₯Ό μ΄μ©νλ©΄ λλ€. νΈμΆν ν¨μμμ μμ ν¨μ μ체λ₯Ό λ¦¬ν΄ μμΌλ²λ¦¬λ©΄, 리ν΄κ°μ΄ 곧 ν¨μμ΄κ² λκ³ , μ΄λ 곧 ν¨μ λ±λ‘μ΄ λμ§ μμκΉ?
function c(n) {
return function(){
console.log(n);
}
}
document.getElementById('c1').addEventListener('click', c(1));
document.getElementById('c2').addEventListener('click', c(2));
document.getElementById('c3').addEventListener('click', c(3));
μ΄λ κ² νλ©΄ μ΄λ²€νΈ 리μ€λλ ν¨μκ° λ¦¬ν΄λ ν¨μλ₯Ό(ν΄λ‘μ μ²λ¦¬κ° λ) λ±λ‘νκ² λ κΌ΄μ΄ λλ€.
νμ΄ν ν¨μλ‘ νννκΈ°
μ’λ ν¨μλ₯Ό 리ν΄νλ ν¨μ μ½λμμ κ°κ²°νκ² νκΈ° μν΄ νμ΄ν ν¨μλ‘ λνλ΄λ©΄ λ€μκ³Ό κ°μ΄ ννμ΄ κ°λ₯νλ€.
const c = (n) => () => { //νμ΄ν ν¨μκ° νμ΄ν ν¨μλ₯Ό 리ν΄νλ€.
console.log(n);
}
document.getElementById('c1').addEventListener('click', c(1));
document.getElementById('c2').addEventListener('click', c(2));
document.getElementById('c3').addEventListener('click', c(3));
βμ²μ보면 κ΄΄μν λ¬Έλ² ννμ νλ₯Ό λ΄λλ₯΄κ² μ§λ§ νμ€ν μ½λλμ μ€μ΄λ κΈ°λ²μ΄λ μ΅μν΄ μ§λ κ²μ΄ μ’λ€.