Skip to content

Commit 4fd7342

Browse files
[변수의 유효범위와 클로저] 과제 번역 보충
1 parent c759e0c commit 4fd7342

File tree

6 files changed

+29
-29
lines changed

6 files changed

+29
-29
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
정답은 **Pete**입니다.
1+
정답은 **지민**입니다.
22

3-
함수는 외부 변수의 지금 값 즉, 가장 최근의 값을 사용합니다.
3+
함수는 외부 변수의 현재 값 즉, 가장 최신의 값을 사용합니다.
44

5-
이전 변수의 값은 어디에도 저장되지 않습니다. 함수가 변수를 찾을 때는 해당 함수의 렉시컬 환경 또는 외부 렉시컬 환경에서 현재 값을 가져옵니다.
5+
이전 값은 어디에도 저장되지 않습니다. 함수에서 변숫값을 사용할 땐 해당 함수의 렉시컬 환경 또는 외부 렉시컬 환경에서 해당 변숫값을 찾습니다.

1-js/06-advanced-functions/03-closure/1-closure-latest-changes/task.md

+8-8
Original file line numberDiff line numberDiff 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

1212
function 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 numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
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"`출력되었을 겁니다.

1-js/06-advanced-functions/03-closure/2-closure-variable-access/task.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# 어떤 변수가 사용가능할까요?
5+
# 어떤 변수가 사용될까요?
66

7-
아래의 `makeWorker` 함수는 다른 함수를 만들고 만든 함수를 반환합니다. 반환된 새 함수는 다른 어딘가에서 호출될 수 있습니다.
7+
아래 `makeWorker` 함수는 내부에서 다른 함수를 만들고 해당 함수를 반환합니다. 반환된 새 함수는 다른 어딘가에서 호출할 수 있습니다.
88

9-
새롭게 반환된 함수는 생성된 곳에서 외부 변수에 접근할까요, 아니면 호출된 위치에서 외부 변수에 접근할까요? 아니면 둘 다 일까요?
9+
새롭게 반환된 함수는 생성된 곳을 기억하고 그곳의 외부 변수에 접근할까요, 아니면 호출된 위치를 기준으로 외부 변수에 접근할까요? 아니면 둘 다일까요?
1010

1111
```js
1212
function makeWorker() {
@@ -26,4 +26,4 @@ let work = makeWorker();
2626
work(); // 무엇이 나올까요?
2727
```
2828

29-
어떤 값이 나타날까요? “Pete”일까요? “John”일까요?
29+
"Pete", "John" 중 어떤 어떤 값이 출력될까요?
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
결과는 에러입니다.
1+
에러가 발생합니다.
22

3-
실행해 보세요:
3+
실제 코드를 실행해 봅시다.
44

55
```js run
66
let x = 1;
@@ -15,20 +15,20 @@ function func() {
1515
func();
1616
```
1717

18-
예제에서는 "존재하지 않는" 변수와 "초기화되지 않은" 변수의 특이한 차이를 관찰할 수 있습니다.
18+
문제는 '존재하지 않는' 변수와 '초기화되지 않은' 변수의 미묘한 차이를 알아보기 위해 만들어졌습니다.
1919

20-
[](info:closure)에서 읽은 것처럼 실행이 코드 블록(또는 함수)들어가는 순간부터 변수는 "초기화되지 않은' 상태에서 시작합니다. 그리고 해당 `let` 문이 실행될 때까지 초기화되지 않은 상태로 남아 있습니다.
20+
[](info:closure)에서 읽은 것처럼 코드 블록(또는 함수) 실행에 들어가는 순간에 그 안의 변수는 '초기화되지 않은' 상태가 됩니다. 그리고 `let`을 만날 때까지 해당 상태가 유지됩니다.
2121

22-
즉, 기술적으로 변수는 존재하지만 `let` 전에 사용할 수 없습니다.
22+
'초기화되지 않은' 상태의 변수는 기술적으론 존재하지만 `let` 문을 만나기 전엔 사용할 수 없습니다.
2323

24-
위의 코드는 이를 잘 보여줍니다.
24+
문제의 코드는 이런 초기화되기 전의 변수에 접근할 때 무슨 일이 일어나는지를 잘 보여줍니다.
2525

2626
```js
2727
function 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)'이라 부릅니다.

1-js/06-advanced-functions/03-closure/7-let-scope/task.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 4
44

55
# 변수가 보일까요?
66

7-
다음 코드의 결과는 무엇일까요?
7+
다음 코드를 실행했을 때 어떤 값이 출력될까요?
88

99
```js
1010
let x = 1;
@@ -18,4 +18,4 @@ function func() {
1818
func();
1919
```
2020

21-
P.S. 이 문제에는 함정이 있습니다. 해결 방법이 명확하지 않습니다.
21+
주의: 이 문제에는 함정이 있습니다. 뻔한 답을 떠올리지 마세요.

0 commit comments

Comments
 (0)