File tree 6 files changed +29
-29
lines changed
1-js/06-advanced-functions/03-closure
2-closure-variable-access
6 files changed +29
-29
lines changed Original file line number Diff line number Diff line change 1
- 정답은 ** Pete ** 입니다.
1
+ 정답은 ** 지민 ** 입니다.
2
2
3
- 함수는 외부 변수의 지금 값 즉, 가장 최근의 값을 사용합니다.
3
+ 함수는 외부 변수의 현재 값 즉, 가장 최신의 값을 사용합니다.
4
4
5
- 이전 변수의 값은 어디에도 저장되지 않습니다. 함수가 변수를 찾을 때는 해당 함수의 렉시컬 환경 또는 외부 렉시컬 환경에서 현재 값을 가져옵니다 .
5
+ 이전 값은 어디에도 저장되지 않습니다. 함수에서 변숫값을 사용할 땐 해당 함수의 렉시컬 환경 또는 외부 렉시컬 환경에서 해당 변숫값을 찾습니다 .
Original file line number Diff line number Diff line change @@ -2,22 +2,22 @@ importance: 5
2
2
3
3
---
4
4
5
- # 함수가 최신 변경사항을 반영할까요? ?
5
+ # 함수가 최신 변경 사항을 반영할까요?
6
6
7
- 함수 sayHi는 외부 변수 name을 사용합니다. 함수가 실행될 때 어떤 값을 사용할까요 ?
7
+ 함수 ` sayHi ` 는 외부 변수 ` name ` 을 사용하고 있는데, 함수가 실행될 때 두 외부 변수 ` name ` 중 어떤 값이 사용될까요 ?
8
8
9
9
``` js
10
- let name = " John " ;
10
+ let name = " 보라 " ;
11
11
12
12
function sayHi () {
13
- alert (" Hi, " + name );
13
+ alert (name + " 님, 안녕하세요. " );
14
14
}
15
15
16
- name = " Pete " ;
16
+ name = " 지민 " ;
17
17
18
- sayHi (); // 뭐가 나올까요?: "John" 아니면 "Pete" ?
18
+ sayHi (); // "보라" 혹은 "지민" 중 무엇이 출력될까요 ?
19
19
```
20
20
21
- 이런 상황은 브라우저와 서버 개발 모두에서 흔하게 발생합니다. 함수는 사용자 작업이나 네트워크 요청 이후 등 생성된 것보다 나중에 실행되도록 예약될 수 있습니다 .
21
+ 이런 상황은 클라이언트, 서버 개발 모두에서 흔하게 발생합니다. 함수는 이미 생성되어 있는데, 사용자의 특정 작업 이후나 네트워크 요청 이후같이 특정 조건을 만족한 후에 함수 호출을 하게 되는 경우는 종종 발생합니다 .
22
22
23
- 그래서, 이 함수가 최신 변경사항을 반영할까요?
23
+ 자, 그럼 다시 질문으로 돌아가 봅시다. 이 함수는 ` name ` 변경 사항을 반영할까요?
Original file line number Diff line number Diff line change 1
1
정답은 ** Pete** 입니다.
2
2
3
- 아래 코드의 ` work() ` 함수는 from 만들어진 곳의 외부 렉시컬 변수 참조를 통해 ` name ` 을 가져옵니다.
3
+ ` work() ` 함수는 만들어진 곳을 기준으로 외부 렉시컬 변수 참조를 통해 ` name ` 을 가져옵니다.
4
4
5
5
![ ] ( lexenv-nested-work.svg )
6
6
7
7
그래서 결과는 ` "Pete" ` 입니다.
8
8
9
- 그런데 만약 ` makeWorker() ` 에 ` let name ` 가 없으면 위의 연결에서 보이는 것처럼 외부를 검색하게 되고 전역 변수를 가져옵니다. 그러면 결과는 ` "John" ` 이 됩니다 .
9
+ 만약 ` makeWorker() ` 함수 내부에 ` let name ` 가 없었다면 바로 전역 스코프에 해당하는 외부에서 변수를 검색해서 ` "John" ` 이 출력되었을 겁니다 .
Original file line number Diff line number Diff line change @@ -2,11 +2,11 @@ importance: 5
2
2
3
3
---
4
4
5
- # 어떤 변수가 사용가능할까요 ?
5
+ # 어떤 변수가 사용될까요 ?
6
6
7
- 아래의 ` makeWorker ` 함수는 다른 함수를 만들고 만든 함수를 반환합니다. 반환된 새 함수는 다른 어딘가에서 호출될 수 있습니다.
7
+ 아래 ` makeWorker ` 함수는 내부에서 다른 함수를 만들고 해당 함수를 반환합니다. 반환된 새 함수는 다른 어딘가에서 호출할 수 있습니다.
8
8
9
- 새롭게 반환된 함수는 생성된 곳에서 외부 변수에 접근할까요, 아니면 호출된 위치에서 외부 변수에 접근할까요? 아니면 둘 다 일까요 ?
9
+ 새롭게 반환된 함수는 생성된 곳을 기억하고 그곳의 외부 변수에 접근할까요, 아니면 호출된 위치를 기준으로 외부 변수에 접근할까요? 아니면 둘 다일까요 ?
10
10
11
11
``` js
12
12
function makeWorker () {
@@ -26,4 +26,4 @@ let work = makeWorker();
26
26
work (); // 무엇이 나올까요?
27
27
```
28
28
29
- 어떤 값이 나타날까요? “Pete”일까요? “John”일까요 ?
29
+ "Pete", "John" 중 어떤 어떤 값이 출력될까요 ?
Original file line number Diff line number Diff line change 1
- 결과는 에러입니다 .
1
+ 에러가 발생합니다 .
2
2
3
- 실행해 보세요:
3
+ 실제 코드를 실행해 봅시다.
4
4
5
5
``` js run
6
6
let x = 1 ;
@@ -15,20 +15,20 @@ function func() {
15
15
func ();
16
16
```
17
17
18
- 이 예제에서는 " 존재하지 않는" 변수와 " 초기화되지 않은" 변수의 특이한 차이를 관찰할 수 있습니다 .
18
+ 이 문제는 ' 존재하지 않는' 변수와 ' 초기화되지 않은' 변수의 미묘한 차이를 알아보기 위해 만들어졌습니다 .
19
19
20
- [ ] ( info:closure ) 에서 읽은 것처럼 실행이 코드 블록(또는 함수)에 들어가는 순간부터 변수는 " 초기화되지 않은' 상태에서 시작합니다 . 그리고 해당 ` let ` 문이 실행될 때까지 초기화되지 않은 상태로 남아 있습니다 .
20
+ [ ] ( info:closure ) 에서 읽은 것처럼 코드 블록(또는 함수) 실행에 들어가는 순간에 그 안의 변수는 ' 초기화되지 않은' 상태가 됩니다 . 그리고 ` let ` 을 만날 때까지 해당 상태가 유지됩니다 .
21
21
22
- 즉, 기술적으로 변수는 존재하지만 ` let ` 전에 사용할 수 없습니다.
22
+ '초기화되지 않은' 상태의 변수는 기술적으론 존재하지만 ` let ` 문을 만나기 전엔 사용할 수 없습니다.
23
23
24
- 위의 코드는 이를 잘 보여줍니다.
24
+ 문제의 코드는 이런 초기화되기 전의 변수에 접근할 때 무슨 일이 일어나는지를 잘 보여줍니다.
25
25
26
26
``` js
27
27
function func () {
28
28
* ! *
29
- // 로컬 변수 x는 함수가 시작될 때부터 엔진이 알고 있지만
30
- // let 문이 실행될 때까지 " 초기화되지 않은" 상태입니다 (" dead zone").
31
- // 따라서 에러가 발생합니다.
29
+ // 엔진은 함수가 시작될 때 로컬 변수 x의 존재를 알고 있지만
30
+ // let 문이 실행될 때까지 x는 ' 초기화되지 않은' 상태( dead zone)이기 때문에
31
+ // 에러가 발생합니다.
32
32
*/ ! *
33
33
34
34
console .log (x); // ReferenceError: Cannot access 'x' before initialization
@@ -37,4 +37,4 @@ function func() {
37
37
}
38
38
```
39
39
40
- 이 변수의 일시적 사용 불가능 구역 (코드 블록의 시작부터 ` let ` 이 나올 때까지) " dead zone" 이라 불리곤 합니다 .
40
+ 실제 초기화가 일어나기 전 변수를 일시적 사용하지 못하는 구간 (코드 블록의 시작부터 ` let ` 이 나올 때까지)을 '데드 존( dead zone)' 이라 부릅니다 .
Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ importance: 4
4
4
5
5
# 변수가 보일까요?
6
6
7
- 다음 코드의 결과는 무엇일까요 ?
7
+ 다음 코드를 실행했을 때 어떤 값이 출력될까요 ?
8
8
9
9
``` js
10
10
let x = 1 ;
@@ -18,4 +18,4 @@ function func() {
18
18
func ();
19
19
```
20
20
21
- P.S. 이 문제에는 함정이 있습니다. 해결 방법이 명확하지 않습니다 .
21
+ 주의: 이 문제에는 함정이 있습니다. 뻔한 답을 떠올리지 마세요 .
You can’t perform that action at this time.
0 commit comments