ν΄λ‘μ λ μλ°μ€ν¬λ¦½νΈμμ λ§€μ° κ°λ ₯νκ³ μ€μν κ°λ
μ€ νλμ
λλ€. ν΄λ‘μ λ μΈλΆ λ³μ(μΈλΆ λ μ컬 νκ²½μ μλ λ³μ)λ₯Ό κΈ°μ΅νκ³ μ κ·Όν μ μλ ν¨μμ
λλ€. μ΄λ₯Όν
λ©΄, μ΄λ€ ν¨μκ° λ€λ₯Έ ν¨μ λ΄μμ μ μλκ³ κ·Έ ν¨μκ° μΈλΆ λ³μλ₯Ό μ°Έμ‘°νλ©΄, ν΄λ‘μ κ° νμ±λ©λλ€.
ν΄λ‘μ λ ν¨μκ° μ μΈλ λμ λ μ컬 μ€μ½ν(Lexical Scope)λ₯Ό κΈ°μ΅νμ¬, ν¨μκ° λ€λ₯Έ μ€μ½νμμ νΈμΆλλλΌλ ν΄λΉ μ€μ½νμ λ³μμ μ κ·Όν μ μκ² νλ κΈ°λ₯μ λ§ν©λλ€.
ν΄λ‘μ λ ν¨μκ° μ μΈλ λμ λ μ컬 μ€μ½ν(Lexical Scope)λ₯Ό κΈ°μ΅νμ¬, ν¨μκ° λ€λ₯Έ μ€μ½νμμ νΈμΆλλλΌλ ν΄λΉ μ€μ½νμ λ³μμ μ κ·Όν μ μκ² νλ κΈ°λ₯μ λ§ν©λλ€.
var makeClosure = function() { var name = 'zero'; return function() { console.log(name); }; }; var closure = makeClosure(); closure(); // 'zero'
makeClosure ν¨μκ° μ€νλ λ name λ³μκ° μμ±λκ³ , λ°νλ λ΄λΆ ν¨μκ° ν΄λ‘μ μν μ ν©λλ€. ν΄λ‘μ μΈ λ΄λΆ ν¨μλ μΈλΆ ν¨μμ μ€μ½νμ μ κ·Όν μ μκΈ° λλ¬Έμ name λ³μμ μ κ·Όνμ¬ κ°μ μΆλ ₯ν μ μμ΅λλ€.
λΉκ³΅κ° λ³μ
λΉκ³΅κ° λ³μλ ν΄λ‘μ λ₯Ό μ¬μ©νμ¬ ν¨μ λ΄λΆμμλ§ μ κ·Όν μ μλ λ³μλ₯Ό μλ―Έν©λλ€. μ΄ λ³μλ ν¨μ λ΄λΆμμ μ μΈλκ±°λ ν¨μμ λ§€κ°λ³μλ‘ μ λ¬λμ§ μμΌλ©΄μλ ν΄λ‘μ λ₯Ό ν΅ν΄ μ κ·Ό κ°λ₯ν©λλ€.
function makeCounter() { let count = 0; // λ΄λΆ ν¨μ(ν΄λ‘μ )λ₯Ό λ°ν return function() { return count++; }; } // makeCounter ν¨μ νΈμΆλ‘ ν΄λ‘μ μμ± let counter = makeCounter(); // ν΄λ‘μ λ₯Ό ν΅ν΄ μΈλΆ λ³μ(count)μ μ κ·Όνκ³ κ°μ λ³κ²½ console.log(counter()); // 0 console.log(counter()); // 1 console.log(counter()); // 2
- makeCounter ν¨μκ° νΈμΆλλ©΄μ μλ‘μ΄ λ μ컬 νκ²½μ΄ λ§λ€μ΄μ§κ³ , count λ³μκ° κ·Έ νκ²½μ μ μ₯λ©λλ€.
- makeCounter ν¨μ λ΄λΆμμ μ μλ μ΅λͺ ν¨μ(ν΄λ‘μ )κ° λ°νλλ©΄μ μΈλΆ λ³μ countμ λν μ°Έμ‘°λ₯Ό μ μ§ν©λλ€.
- λ°νλ μ΅λͺ ν¨μκ° counter λ³μμ ν λΉλλ©΄μ ν΄λ‘μ κ° νμ±λ©λλ€.
- counterλ₯Ό νΈμΆν λλ§λ€ ν΄λ‘μ λ μΈλΆ λ³μ countμ μ κ·Όνμ¬ κ°μ λ³κ²½νκ³ λ°νν©λλ€.
ν΄λ‘μ λ ν¨μκ° μμ±λ λμ λ μ컬 μ€μ½ν(μ΄νμ μ€μ½ν)μ μλ λ³μμ λν μ°Έμ‘°λ₯Ό κΈ°μ΅ν©λλ€. μ΄λ₯Ό ν΅ν΄ ν¨μκ° λμ€μ νΈμΆλ λμλ ν΄λΉ λ³μμ μ κ·Όν μ μμ΅λλ€. ν΄λ‘μ λ ν¨μν νλ‘κ·Έλλ°, λΉλκΈ° μμ
, μ 보 μλ λ± λ€μν μν©μμ μ¬μ©λλ©°, μλ°μ€ν¬λ¦½νΈμμ κ³ μ νκ³ κ°λ ₯ν νΉμ§ μ€ νλμ
λλ€.
μ΄λ²€νΈ 리μ€λμ ν΄λ‘μ
μ΄λ²€νΈ 리μ€λμ ν΄λ‘μ κ΄λ ¨ λ¬Έμ μ λν μ€λͺ
μμ, ν΄λ‘μ λ₯Ό μ¬μ©νμ¬ κ° μ΄λ²€νΈ νΈλ€λ¬κ° λ°λ³΅λ¬Έμ κ° λ¨κ³μμ κ³ μ ν μΈλ±μ€λ₯Ό κΈ°μ΅νλλ‘ μμ ν μμ μ
λλ€.
for (var i = 0; i < 5; i++) { (function(j) { $('#target' + j).on('click', function() { alert(j); }); })(i); }
μ΄λ κ² νλ©΄ ν΄λ‘μ λ₯Ό ν΅ν΄ κ° μ΄λ²€νΈ νΈλ€λ¬κ° μμ λ§μ κ³ μ ν j κ°μ κΈ°μ΅νκ² λμ΄, ν΄λ¦ν λ κ° λ²νΌμ ν΄λΉνλ μΈλ±μ€κ° μ¬λ°λ₯΄κ² μΆλ ₯λ©λλ€. ν΄λ‘μ λ₯Ό μ¬μ©νμ¬ λ³μμ κ°μ κ³ μ μμΌ μ΄λ²€νΈ νΈλ€λ¬κ° μ μμ μΌλ‘ μλνλλ‘ λ§λ€μμ΅λλ€.
κ°μ΄ μ°Έκ³ νλ©΄ μ’μ λ§ν¬
https://www.zerocho.com/category/JavaScript/post/5741d96d094da4986bc950a0
https://www.zerocho.com/category/JavaScript/post/5741d96d094da4986bc950a0