Aug. 20, 2021, 3:16 pm.
Closure
Closureλ ν¨μμ ν¨μμ μ€ν νκ²½(λλ μμ± μμ μ£Όμ
λ 컨ν
μ€νΈ)κ³Ό ν¨μκ° λ²λ€λ μνλ₯Ό λ»νλ€. κ·Έλ¬λ―λ‘ ν΄λ‘μ Έλ ν¨μ λ°κΉ₯μ μ€μ½νλ₯Ό ν¨μ μμμ μ κ·Όν μ μλλ‘ ν΄μ£Όλ©°, μλ°μ€ν¬λ¦½νΈμμλ ν΄λ‘μ Έλ ν¨μκ° μμ±λ λ μμ±λλ€.
ν΄λ‘μ λ ν¨μμ΄λ€. κ·Έκ²μ΄ μμ±λ 컨ν
μ€νΈ, μ¬μ§μ΄ κ·Έ 컨ν
μ€νΈκ° μν μ λ€νμ λμλ, κ·Έ 컨ν
μ€νΈμ λ³μλ€μ μ κ·Ό ν μ μλ ν¨μμ΄λ€.
const init = () => {
const prefix = 'Hello'
function greet(name) {
console.log(prefix + ' ' + name)
}
return greet
}
const greet = init()
greet('Mozilla')
greet('Google')
μλ°μ€ν¬λ¦½νΈ νμλ nestedλ ν¨μλ€μ΄ κ°μ μ°Έμ‘°νλ λ³μλ€μ μ΄μ²λΌ resolveνλ€. Lexical scopingμ΄λ λ»μ μμ€ μ½λμμ λ³μκ° μ μλ μμΉλ₯Ό ν΅ν΄μ κ·Έ λ³μκ° μ¬μ©κ°λ₯ν κ³³μ΄ μ μλλ€λ λ»μ΄λ€. nested ν¨μλ€μ λ°κΉ₯ μ€μ½νμ λ³μλ€μ μ κ·Όμ΄ κ°λ₯νλ€.
This is an example of lexical scoping, which describes how a parser resolves variable names when functions are nested. The word lexical refers to the fact that lexical scoping uses the location where a variable is declared within the source code to determine where that variable is available. Nested functions have access to variables declared in their outer scope.
ν΄λ‘μ Έλ₯Ό μ¬μ©νλ μ΄μ
첫λ²μ§Έ μ΄μ λ λ°μ΄ν°λ₯Ό 보νΈνκΈ° μν΄μμ΄λ€. λ°μ΄ν°λ₯Ό 보νΈν¨μΌλ‘μ¨ μ°λ¦¬κ° μμ±ν νλ‘κ·Έλ¨μ΄ implementation detailμ κ°μΆκ³ interfaceλ₯Ό μ 곡ν μ μλ€. (μ μκ° νμλ³΄λ€ λ³νκΈ° μ½λ€)
ν΄λ‘μ Έλ₯Ό μ¬μ©νλ €λ©΄, λ¨μνκ² ν¨μλ₯Ό λ€λ₯Έ ν¨μ μμ μ μνκ³ λ
ΈμΆνλ©΄ λλ€.
ν΄λ‘μ Έκ° λμνλ λ°©μ
ν¨μκ° μ€νλ λ, Lexical νκ²½μ΄ μλμΌλ‘ μμ±λλ€. μ΄κ³³μ μ§μ λ³μμ ν¨μ μ€ν μ μ£Όμ
λ λ³μλ€μ΄ μ μ₯λλ€. ν¨μκ° μ€νλλ λμμλ λ κ°μ Lexical νκ²½μ΄ μ‘΄μ¬νλ€. ν¨μ λ΄λΆμ μΈλΆ. λ³μλ₯Ό μ°Ύλ μμλ λ΄λΆμμ μΈλΆ μμμ΄λ€.
μ 리
- ν΄λ‘μ Έλ λ°κΉ₯ λ³μλ€μ κΈ°μ΅νκ³ μ κ·Όν μ μλ ν¨μ
- ν¨μμ lexical νκ²½μ ν©
[[Environment]]
λ μΈλΆ lexical νκ²½μ μ§μΉνλ€.