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