-
Notifications
You must be signed in to change notification settings - Fork 42
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
## ν΄λ‘μ | ||
|
||
**μ€λ μ½μ λ²μ** : 24.1 ~ 24.3 | ||
|
||
### 0. ν΄λ‘μ | ||
|
||
--- | ||
|
||
#### _ν΄λ‘μ (closure)_ | ||
|
||
μλ°μ€ν¬λ¦½νΈ κ³ μ μ κ°λ μ΄ μλ, ν¨μλ₯Ό μΌκΈ κ°μ²΄λ‘ μ·¨κΈνλ `ν¨μν νλ‘κ·Έλλ° μΈμ΄`(νμ€μΌ, 리μ€ν, μΌλ, μ€μΉΌλΌ λ±)μμ μ¬μ©λλ μ€μν `νΉμ§`μ΄λ€. | ||
|
||
``` | ||
ν΄λ‘μ = ν¨μ + λ μ컬 ν¨μ | ||
``` | ||
|
||
### 1. λ μ컬 μ€μ½ν | ||
|
||
--- | ||
|
||
#### _λ μ컬 μ€μ½ν(μ μ μ€μ½ν)_ | ||
|
||
μλ°μ€ν¬λ¦½νΈ μμ§μ ν¨μλ₯Ό μ΄λμ νΈμΆνλμ§κ° μλλΌ `ν¨μλ₯Ό μ΄λμ μ μνλμ§μ λ°λΌ μμ μ€μ½νλ₯Ό κ²°μ `νλλ° μ΄κ±Έ **λ μ컬 μ€μ½ν**λΌκ³ νλ€. | ||
|
||
`μ€μ½νμ μ€μ²΄`λ μ€ν 컨ν μ€νΈμ `λ μ컬 νκ²½`μ΄λ€. μ΄ λ μ컬 νκ²½μ μμ μ "μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°"μ μ μ₯ν μ°Έμ‘°κ°μ΄ λ°λ‘ μμ λ μ컬 νκ²½μ λν μ°Έμ‘°μ΄λ©°, μ΄κ²μ΄ μμ μ€μ½νμ΄κΈ° λλ¬Έμ΄λ€. | ||
|
||
μ¦, λ μ컬 μ€μ½νλ | ||
=> `λ μ컬 νκ²½μ "μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°"μ μ μ₯ν μ°Έμ‘°κ°, μ¦ μμ μ€μ½νμ λν μ°Έμ‘°λ ν¨μ μ μκ° νκ°λλ μμ μ ν¨μκ° μ μλ νκ²½(μμΉ)μ μν΄ κ²°μ .` | ||
|
||
```jsx | ||
const x = 1; | ||
|
||
function foo() { | ||
const x = 10; | ||
bar(); | ||
} | ||
|
||
function bar() { | ||
console.log(x); | ||
} | ||
|
||
foo(); // ? | ||
bar(); // ? | ||
``` | ||
|
||
### 2. ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]] | ||
|
||
--- | ||
|
||
#### _ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]]_ | ||
|
||
ν¨μκ° μ μλ νκ²½(μμΉ)κ³Ό νΈμΆλλ νκ²½(μμΉ)λ λ€λ₯Ό μ μμ΄μ λ μ컬 μ€μ½νκ° κ°λ₯νλ €λ©΄ ν¨μλ μμ μ΄ νΈμΆλλ νκ²½κ³Όλ μκ΄μμ΄ μμ μ΄ μ μν ν¨μ(=μμ μ€μ½ν)λ₯Ό κΈ°μ΅ν΄μΌ νλ€. μ΄λ₯Ό μν΄ `ν¨μ μμ μ λ΄λΆ μ¬λ‘― [[Environment]]μ μμ μ΄ μ μλ νκ²½, μ¦ μμ μ€μ½νλ₯Ό μ μ₯νλ€.` | ||
|
||
- μ μ μ½λ νκ° μμ -> μ μ λ μ컬 νκ²½μ μ°Έμ‘° μ μ₯ | ||
- μΈλΆ μ½λ νκ° μμ -> μΈλΆ λ μ컬 νκ²½μ μ°Έμ‘° μ μ₯ | ||
|
||
ν¨μ κ°μ²΄μ λ΄λΆ μ¬λ‘― [[Environment]]μ μ μ₯λ νμ¬ μ€ν 컨ν μ€νΈμ λ μ컬 νκ²½μ μ°Έμ‘°κ° **μμ μ€μ½ν**λ€. λν μμ μ΄ νΈμΆλ λ μμ±λ ν¨μ λ μ컬 νκ²½μ "μΈλΆ λ μ컬 νκ²½μ λν μ°Έμ‘°"μ μ μ₯λ μ°Έμ‘° κ°μ΄λ€. **ν¨μ κ°μ²΄**λ `λ΄λΆ μ¬λ‘― [[Environment]]μ μ μ₯ν λ μ컬 νκ²½μ μ°Έμ‘°, μ¦ μμ μ€μ½νλ₯Ό μμ μ΄ μ‘΄μ¬νλ ν κΈ°μ΅νλ€.` | ||
|
||
### 3. ν΄λ‘μ μ λ μ컬 νκ²½ | ||
|
||
ν΄λ‘μ : μΈλΆ ν¨μλ³΄λ€ μ€μ²© ν¨μκ° λ μ€λ μ μ§λλ κ²½μ°, `μ΄λ―Έ μλͺ μ£ΌκΈ°κ° μ’ λ£ν μΈλΆ ν¨μμ λ³μλ₯Ό μ°Έμ‘°ν μ μλ μ€μ ν¨μ`. μ€μ²© ν¨μκ° μμ μ€μ½νμ μλ³μλ₯Ό μ°Έμ‘°νκ³ μκ³ , μ€μ²© ν¨μκ° μΈλΆ ν¨μλ³΄λ€ λ μ€λ μ μ§λλ κ²½μ°μλ§ νμ€νλ κ²μ΄ μΌλ°μ . | ||
|
||
μμ ν¨μ : ν΄λ‘μ μ μν΄ μ°Έμ‘°λλ μμ μ€μ½νμ λ³μ. ν΄λ‘μ λ βν¨μκ° μμ λ³μμ λν΄ λ«νμλ€.βλΌλ μλ―Έ. μ¦, `μμ λ³μμ λ¬Άμ¬μλ ν¨μ` | ||
|
||
--- | ||
|
||
#### _ν΄λ‘μ μ λ μ컬 νκ²½_ | ||
|
||
```jsx | ||
const x = 1; | ||
|
||
// β | ||
function outer() { | ||
const x = 10; | ||
const inner = function () { console.log(x); }; // β‘ | ||
return inner; | ||
} | ||
|
||
// outer ν¨μλ₯Ό νΈμΆνλ©΄ μ€μ²© ν¨μ innerλ₯Ό λ°ννλ€. | ||
// κ·Έλ¦¬κ³ outer ν¨μμ μ€ν 컨ν μ€νΈλ μ€ν 컨ν μ€νΈ μ€νμμ νλμ΄ μ κ±°λλ€. | ||
const innerFunc = outer(); // β’ | ||
innerFunc(); // β£ 10 | ||
``` | ||
|
||
- μμ μμμμ, outer ν¨μμ μ€ν 컨ν μ€νΈκ° μ€ν 컨ν μ€νΈ μ€νμμ μ κ±°λλλΌλ `outer ν¨μμ λ μ컬 νκ²½μ μλ©Ένμ§ μμ`. | ||
|
||
- innerλ ν¨μ ννμμΌλ‘ μ μνκΈ° λλ¬Έμ λ°νμμ νκ°λ¨. innerν¨μλ [[Environment]] λ΄λΆ μ¬λ‘―μ νμ¬ μ€ν μ€μΈ μ±ν 컨ν μ€νΈμ λ μ컬νκ²½, μ¦ outer ν¨μμ λ μ컬 νκ²½μ μμ μ€μ½νλ‘ μ μ₯. | ||
|
||
- outer ν¨μμ μ€ν 컨ν μ€νΈκ° μ€ν 컨ν μ€νΈ μ€νμμ μ κ±°. | ||
|
||
- inner ν¨μμ [[Environment]] λ΄λΆ μ¬λ‘―μ μν΄ μ°Έμ‘°λκ³ μκ³ , innter ν¨μλ μ μ λ³μ innerFuncμ μν΄ μ°Έμ‘°λκ³ μμΌλ―λ‘, κ°λΉμ§ 컬λ ν μ΄ λμ§ μκΈ° λλ¬Έ. | ||
|
||
- μ΄λ‘ μ μΌλ‘ μλ°μ€ν¬λ¦½νΈμ λͺ¨λ ν¨μλ μμ μ€μ½νλ₯Ό κΈ°μ΅νκΈ° λλ¬Έμ ν΄λ‘μ λΌκ³ ν μ μμ. | ||
|
||
- νμ§λ§ μμ μ€μ½νμ μ΄λ ν μλ³μλ μ°Έμ‘°νμ§ μλλ€λ©΄ λͺ¨λ λΈλΌμ°μ μ μν΄ μ΅μ νλμ΄ μμ μ€μ½νλ₯Ό κΈ°μ΅X. | ||
|
||
=> μ€μ²© ν¨μ innerμ λ΄λΆμλ μμ μ€μ½νλ₯Ό μ°Έμ‘°ν μ μμΌλ―λ‘ μμ μ€μ½νμ μλ³μλ₯Ό μ°Έμ‘°ν μλ, μλ³μμ κ°μ λ³κ²½ν μλ μμ. | ||
|