: μ€μ½νμ μ€μ²΄λ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ΄λ€. μ΄ λ μ컬 νκ²½μ μμ μ 'μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°'λ₯Ό ν΅ν΄ μμ λ μ컬 νκ²½κ³Ό μ°κ²°λλ€. μ΄κ²μ΄ μ€μ½ν 체μΈμ΄λ€.
: μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ μμμ€μ½νλ₯Ό κ²°μ νλ€.
: λ μ컬 νκ²½μ 'μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°'μ μ μ₯ν μ°Έμ‘°κ°, μ¦ μμ μ€μ½νμ λν μ°Έμ‘°λ ν¨μ μ μκ° νκ°λλ μμ μ ν¨μκ° μ μλ νκ²½(μμΉ)μ μν΄ κ²°μ λλ€.
: ν¨μλ μμ μ λ΄λΆ μ¬λ‘― [[Environment]]μ μμ μ μ μλ νκ²½, μ¦ μμ μ€μ½νμ μ°Έμ‘°λ₯Ό μ μ₯νλ€.
- μΈλΆ ν¨μλ³΄λ€ μ€μ²© ν¨μκ° λ μ€λ μ μ§λλ κ²½μ° μ€μ²© ν¨μλ μ΄λ―Έ μλͺ μ£ΌκΈ°κ° μ’ λ£ν μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°ν μ μλ μ€μ²©ν¨μλ₯Ό ν΄λ‘μ λΌκ³ νλ€.
- μλ°μ€ν¬λ¦½νΈμ λͺ¨λ ν¨μλ μμ μ μμ μ€μ½νλ₯Ό κΈ°μ΅νλ€.
- λͺ¨λ ν¨μκ° κΈ°μ΅νλ μμ μ€μ½νλ ν¨μλ₯Ό μ΄λμ νΈμΆνλ μκ΄μμ΄ μ μ§λλ€. λ°λΌμ ν¨μλ μΈμ λ μμ μ΄ κΈ°μ΅νλ μμ μ€μ½νμ μλ³μλ₯Ό μ°Έμ‘°ν μ μμΌλ©° μλ³μμ λ°μΈλ©λ κ°μ λ³κ²½ν μλ μλ€.
πΎ#01
const x = 1;
functoion outer(){
const x = 10;
const inner = function () { console.log(x); };
return inner;
}
const innerFnc = outer();
innerFnc(); // 10
ππ» μλͺ μ£ΌκΈ°κ° μ’ λ£ν μΈλΆ ν¨μ(outer)μ λ³μ(x)λ₯Ό μ°Έμ‘°ν μ μλ μ€μ²©ν¨μ(inner)λ₯Ό ν΄λ‘μ λΌκ³ νλ€!
ππ» outer ν¨μμ μ€ν 컨ν μ€νΈλ μ€ν 컨ν μ€νΈ μ€νμμ μ κ±°λμ§λ§ outer ν¨μμ λ μ컬 νκ²½κΉμ§ μλ©Ένλ κ²μ μλλ€.
const counter = (function(){
// μμ λ³μ
let counter = 0;
return function(fn){
counter = fn(counter);
return counter;
};
}());
// 보쑰 ν¨μ
function increase(num){
return ++num;
}
// 보쑰 ν¨μ
function decrease(num){
return --num;
}
// 보쑰 ν¨μλ₯Ό μ λ¬νμ¬ νΈμΆ
console.log(counter(increase)); // 1
console.log(counter(increase)); // 2
// μμ λ³μλ₯Ό 곡μ νλ€.
console.log(counter(decrease)); // 1
console.log(counter(decrease)); // 0