μ€λ λ°°μ΄ λ΄μ©μ
- μ€μ½ν
- ν΄λ‘μ
ν΅μ¬ λ΄μ©λ§ μ λ¦¬ν΄ λ³΄λ €κ³ νλ€.
1. μ€μ½ν
- λ³μμ μ ν¨λ²μλ‘ μ¬μ©λλ€.
- λ²μκ° μ€κ΄νΈ(λΈλ‘) λλ ν¨μμ μν΄ λλμ΄μ§κ³ , κ·Έ λ²μλ₯Ό μ€μ½νλΌκ³ λΆλ₯Έλ€.
μμͺ½ μ€μ½ν, λ°κΉ₯ μ€μ½ν ꡬλΆ
μ μ μ€μ½ν, μ§μ μ€μ½ν
- κ°μ₯ λ°κΉ₯ μ€μ½νλ μ μ μ€μ½νλ‘ λΆλ¦Ό
- μμͺ½ μ€μ½ν, μ¦ μ μ μ€μ½νκ° μλ κ²μ μ λΆ μ§μ μ€μ½νλ‘ λΆλ¦Ό
μ€μ½ν κ·μΉ
- μ€μ½νλ μ€μ²©μ΄ κ°λ₯νλ€.
- μ§μ λ³μλ μ μ λ³μλ³΄λ€ λ λμ μ°μ μμλ₯Ό κ°μ§λ€.
- μμͺ½ μ€μ½νμμ λ°κΉ₯ μ€μ½νμ μλ λ³μμ μ κ·Όμ΄ κ°λ₯
- λ°λλ‘ λ°κΉ₯ μ€μ½νμμλ μμͺ½ μ€μ½νμ μλ λ³μμ μ κ·Όμ΄ λΆκ°λ₯
μ€μ½ν μ’
λ₯
- λΈλ‘ μ€μ½ν : μ€κ΄νΈ κΈ°μ€ λ²μ (μ€κ΄νΈ μμ λ²μ)
ν¨μμ fucntion ν€μλ μμ΄ μ¬μ©νλ©΄ λΈλ‘ μ€μ½ν
(νμ΄ν ν¨μ ν¬ν¨)
- ν¨μ μ€μ½ν : ν¨μλ‘ λλ¬μΌ λ²μ
ν¨μμ function ν€μλλ₯Ό μ¬μ©νλ©΄ ν¨μ μ€μ½ν
(νμ΄ν ν¨μ ν¬ν¨)
π μ€μ½ν μΆκ°μ μΈ λΆλΆ
-
var ν€μλλ λΈλ‘ μ€μ½νλ₯Ό 무μνλ€.
for(var i = 0; i < 5; i++){
}
console.log( i ) => λΈλ‘ μ€μ½ν λ°μμ μ€νμ΄ λλ€.
-
λ¨, νμ΄ν ν¨μμ λΈλ‘ μ€μ½νλ 무μνμ§ μλλ€.
-
var ν€μλλ‘ μΈν μνμ±λ μκΈ° λλ¬Έμ,
μμ νκ² μ¬μ©μ΄ κ°λ₯ν let , const λ₯Ό μ΄μ©ν΄μΌ ν¨
2. ν΄λ‘μ
- ν¨μμ ν¨μκ° μ μΈλ μ΄νμ (lexical) νκ²½μ μ‘°ν©
- μΈλΆ ν¨μμ λ³μμ μ κ·Όν μ μλ λ΄λΆ ν¨μ
- μ€μ½ν 체μΈμ΄λΌκ³ λ λΆλ¦Ό
ν΄λ‘μ μ 3κ°μ§ μ€μ½ν 체μΈ
- ν΄λ‘μ μμ μ λν μ κ·Ό(μμ μ λΈλλ΄μ μ μλ λ³μ)
- μΈλΆ ν¨μμ λ³μμ λν μ κ·Ό
- μ μ λ³μμ λν μ κ·Ό
π ν΄λ‘λ² μμ
function outerFn() {
const outerFnVar = 'outer ν¨μ λ΄μ λ³μ';
const innerFn = function () {
return (
'innerFnμ ' + outerFnVar + 'μ ' + globalVar + 'μ μ κ·Όν μ μμ΅λλ€.');
};
return innerFn;
}
// innerFn ν¨μμμλ λ¬Έμμ΄μ λ¦¬ν΄ / μ΄λλ‘ ? outerFn ν¨μλ‘
// outerFn ν¨μμμλ innerFn ν¨μλ₯Ό λ¦¬ν΄ / μ΄λλ‘ ? μΈλΆλ‘
const innerFnOnGlobal = outerFn();
// outerFn ν¨μ μ€νκ²°κ³Όλ₯Ό innerFnOnGlobalμ μ§μ
const message = innerFnOnGlobal();
// innerFnOnGlobal()μλ innerFn ν¨μμ μ£Όμκ°μ΄ λ€μ΄κ° μλ€. κ·Έκ±Έ messageμ μ§μ ν΄μ£Όλ©΄ innerFn ν¨μμ λ¦¬ν΄ κ°μ΄ λ€μ΄κ°
console.log(message);
ν΄λ‘μ ꡬλΆ
π¬ μ΄ν΄κ° μλ²½νκ² λμ§ μμκ±°λ 볡μ΅ν΄μΌ νλ€κ³ μκ°νλ μ
-
μμ μμμλ§ μ΄ν΄κ° λ κ² κ°μμ ꡬκΈλ§μ ν΅ν΄μ ν΄λ‘μ μμλ₯Ό λ λ§μ΄ λ³΄κ³ λ₯νκ² μ΄ν΄λ₯Ό ν΄μΌ ν κ² κ°λ€.
-
μμ μμλ₯Ό λ³Ό λ outerFn ν¨μμ μ΄λ ν κ°μ΄ μλ€λ©΄
ν¨μ μΈλΆμμ outerFn() κ°μ΄ μ΄λ»κ² λ μ§ μμμ΄ μλλ€.
μλ§ 1λ²μ μ΄μ μΈ κ² κ°λ€.
ν΄λ‘μ μ°Έκ³ λ¬Έμ λ§ν¬ :
http://clipsoft.co.kr/wp/blog/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%81%B4%EB%A1%9C%EC%A0%80closure/