diff --git a/1-js/02-first-steps/13-while-for/article.md b/1-js/02-first-steps/13-while-for/article.md
index 5e8991c27c..fee9f4adcc 100644
--- a/1-js/02-first-steps/13-while-for/article.md
+++ b/1-js/02-first-steps/13-while-for/article.md
@@ -47,8 +47,8 @@ while (i) { // i가 0이 되면 조건이 falsy가 되므로 반복문이 멈춥
}
```
-````smart header="본문이 한 줄이면 대괄호를 쓰지 않아도 됩니다."
-반복문 본문이 한 줄짜리 문이라면 대괄호 `{…}`를 생략할 수 있습니다.
+````smart header="본문이 한 줄이면 중괄호를 쓰지 않아도 됩니다."
+반복문 본문이 한 줄짜리 문이라면 중괄호 `{…}`를 생략할 수 있습니다.
```js run
let i = 3;
@@ -268,7 +268,7 @@ for (let i = 0; i < 10; i++) {
기술적인 관점에서 봤을 때, 이 예시는 위쪽에 있는 예시와 동일합니다. `continue`를 사용하는 대신 코드를 `if` 블록으로 감싼 점만 다릅니다.
-그런데 이렇게 코드를 작성하면 부작용으로 중첩 레벨(대괄호 안의 `alert` 호출)이 하나 더 늘어납니다. `if` 안의 코드가 길어진다면 전체 가독성이 떨어질 수 있습니다.
+그런데 이렇게 코드를 작성하면 부작용으로 중첩 레벨(중괄호 안의 `alert` 호출)이 하나 더 늘어납니다. `if` 안의 코드가 길어진다면 전체 가독성이 떨어질 수 있습니다.
````
````warn header="'?' 오른쪽엔 `break`나 `continue`가 올 수 없습니다."
diff --git a/1-js/02-first-steps/16-function-expressions/article.md b/1-js/02-first-steps/16-function-expressions/article.md
index daac603d43..1ea5b81e3a 100644
--- a/1-js/02-first-steps/16-function-expressions/article.md
+++ b/1-js/02-first-steps/16-function-expressions/article.md
@@ -365,4 +365,4 @@ welcome(); // 제대로 동작합니다.
함수를 선언해야 한다면 함수가 선언되기 이전에도 함수를 활용할 수 있기 때문에, 함수 선언문 방식을 따르는 게 좋습니다. 함수 선언 방식은 코드를 유연하게 구성할 수 있도록 해주고, 가독성도 좋습니다.
-함수 표현식은 함수 선언문을 사용하는게 부적절할 때에 사용하는 것이 좋습니다. 이번 챕터에서 함수 선언문을 사용해야만 하는 경우를 몇 가지 알아보았는데, 튜토리얼 뒤쪽에서 좀 더 깊게 해당 사례를 살펴보도록 하겠습니다.
+함수 표현식은 함수 선언문을 사용하는게 부적절할 때에 사용하는 것이 좋습니다. 이번 챕터에서 함수 표현식을 사용해야만 하는 경우를 몇 가지 알아보았는데, 튜토리얼 뒤쪽에서 좀 더 깊게 해당 사례를 살펴보도록 하겠습니다.
diff --git a/1-js/02-first-steps/18-javascript-specials/article.md b/1-js/02-first-steps/18-javascript-specials/article.md
index 277b9f20c8..915fdf1513 100644
--- a/1-js/02-first-steps/18-javascript-specials/article.md
+++ b/1-js/02-first-steps/18-javascript-specials/article.md
@@ -259,7 +259,7 @@ switch (age) {
// 화살표(=>) 우측엔 표현식이 있음
let sum = (a, b) => a + b;
- // 대괄호{ ... }를 사용하면 본문에 여러 줄의 코드를 작성할 수 있음. return문이 꼭 있어야 함.
+ // 중괄호{ ... }를 사용하면 본문에 여러 줄의 코드를 작성할 수 있음. return문이 꼭 있어야 함.
let sum = (a, b) => {
// ...
return a + b;
diff --git a/1-js/05-data-types/01-primitives-methods/article.md b/1-js/05-data-types/01-primitives-methods/article.md
index 95801e0ea7..a07937a393 100644
--- a/1-js/05-data-types/01-primitives-methods/article.md
+++ b/1-js/05-data-types/01-primitives-methods/article.md
@@ -12,7 +12,7 @@
객체:
- 프로퍼티에 다양한 종류의 값을 저장할 수 있습니다.
-- `{name : "John", age : 30}`와 같이 대괄호 `{}`를 사용해 만들 수 있습니다. 자바스크립트에는 여러 종류의 객체가 있는데, 함수도 객체의 일종입니다.
+- `{name : "John", age : 30}`와 같이 중괄호 `{}`를 사용해 만들 수 있습니다. 자바스크립트에는 여러 종류의 객체가 있는데, 함수도 객체의 일종입니다.
객체의 장점 중 하나는 함수를 프로퍼티로 저장할 수 있다는 것입니다.
diff --git a/1-js/05-data-types/02-number/4-endless-loop-error/solution.md b/1-js/05-data-types/02-number/4-endless-loop-error/solution.md
index 8bc55bd027..c7bb53cbb9 100644
--- a/1-js/05-data-types/02-number/4-endless-loop-error/solution.md
+++ b/1-js/05-data-types/02-number/4-endless-loop-error/solution.md
@@ -1,6 +1,6 @@
-That's because `i` would never equal `10`.
+`i`는 절대 `10`이 될 수 없어서 무한 루프가 발생합니다.
-Run it to see the *real* values of `i`:
+코드를 실행해 실제 `i` 값을 확인해 봅시다.
```js run
let i = 0;
@@ -10,8 +10,8 @@ while (i < 11) {
}
```
-None of them is exactly `10`.
+어떤 경우에도 `i`는 `10`이 될 수 없습니다.
-Such things happen because of the precision losses when adding fractions like `0.2`.
+이런 일이 발생하는 이유는 `0.2`와 같은 분수를 더할 때 정밀도 손실이 발생하기 때문입니다.
-Conclusion: evade equality checks when working with decimal fractions.
\ No newline at end of file
+그러므로 소수나 분수를 대상으로 작업 할 땐 등호 비교를 피하세요.
diff --git a/1-js/05-data-types/02-number/4-endless-loop-error/task.md b/1-js/05-data-types/02-number/4-endless-loop-error/task.md
index 592ece31c0..a5f63e929f 100644
--- a/1-js/05-data-types/02-number/4-endless-loop-error/task.md
+++ b/1-js/05-data-types/02-number/4-endless-loop-error/task.md
@@ -2,9 +2,9 @@ importance: 4
---
-# An occasional infinite loop
+# 무한 루프
-This loop is infinite. It never ends. Why?
+아래 반복문은 무한대로 작동합니다. 왜 그럴까요?
```js
let i = 0;
diff --git a/1-js/05-data-types/02-number/8-random-min-max/solution.md b/1-js/05-data-types/02-number/8-random-min-max/solution.md
index 8736c3d561..edbd7752da 100644
--- a/1-js/05-data-types/02-number/8-random-min-max/solution.md
+++ b/1-js/05-data-types/02-number/8-random-min-max/solution.md
@@ -1,8 +1,8 @@
We need to "map" all values from the interval 0..1 into values from `min` to `max`.
-That can be done in two stages:
+이 작업은 두 단계로 이루어집니다.
-1. If we multiply a random number from 0..1 by `max-min`, then the interval of possible values increases `0..1` to `0..max-min`.
+1. 0과 1 사이의 임의의 숫자에 `max-min`를 곱하면 가능한 값의 간격이 `0..1`에서 `0..max-min`으로 증가합니다.
2. Now if we add `min`, the possible interval becomes from `min` to `max`.
The function:
diff --git a/1-js/05-data-types/02-number/8-random-min-max/task.md b/1-js/05-data-types/02-number/8-random-min-max/task.md
index 7037cfcbb9..841da4111c 100644
--- a/1-js/05-data-types/02-number/8-random-min-max/task.md
+++ b/1-js/05-data-types/02-number/8-random-min-max/task.md
@@ -2,13 +2,13 @@ importance: 2
---
-# A random number from min to max
+# min과 max 사이에 있는 임의의 숫자 생성하기
-The built-in function `Math.random()` creates a random value from `0` to `1` (not including `1`).
+내장 함수 `Math.random()`은 `0`부터 `1`까지의(`1`은 포함되지 않음) 랜덤한 값을 생성합니다.
-Write the function `random(min, max)` to generate a random floating-point number from `min` to `max` (not including `max`).
+`random(min, max)`함수를 작성하여 `min`부터 `max`까지 임의의 부동 소수점 숫자를 생성합니다(`max`는 포함되지 않음).
-Examples of its work:
+예시를 살펴봅시다.
```js
alert( random(1, 5) ); // 1.2345623452
diff --git a/1-js/05-data-types/02-number/article.md b/1-js/05-data-types/02-number/article.md
index dfaf6d483f..3b04f080a0 100644
--- a/1-js/05-data-types/02-number/article.md
+++ b/1-js/05-data-types/02-number/article.md
@@ -29,8 +29,8 @@ alert( 7.3e9 ); // 73억 (7,300,000,000)
즉, `'e'`는 e 왼쪽의 수에 e 오른쪽에 있는 수만큼의 10의 거듭제곱을 곱하는 효과가 있습니다.
```js
-1e3 = 1 * 1000
-1.23e6 = 1.23 * 1000000
+1e3 === 1 * 1000
+1.23e6 === 1.23 * 1000000
```
이제 아주 작은 숫자인 1마이크로초(백만 분의 1초)를 표현해보겠습니다.
@@ -51,10 +51,10 @@ let ms = 1e-6; // 1에서 왼쪽으로 6번 소수점 이동
```js
// 10을 세 번 거듭제곱한 수로 나눔
-1e-3 = 1 / 1000 (=0.001)
+1e-3 === 1 / 1000 // 0.001
// 10을 여섯 번 거듭제곱한 수로 나눔
-1.23e-6 = 1.23 / 1000000 (=0.00000123)
+1.23e-6 === 1.23 / 1000000 // 0.00000123
```
### 16진수, 2진수, 8진수
diff --git a/1-js/05-data-types/10-destructuring-assignment/article.md b/1-js/05-data-types/10-destructuring-assignment/article.md
index e8076ec788..42842f08a1 100644
--- a/1-js/05-data-types/10-destructuring-assignment/article.md
+++ b/1-js/05-data-types/10-destructuring-assignment/article.md
@@ -7,6 +7,7 @@
개발을 하다 보면 함수에 객체나 배열을 전달해야 하는 경우가 생기곤 합니다. 가끔은 객체나 배열에 저장된 데이터 전체가 아닌 일부만 필요한 경우가 생기기도 하죠.
이럴 때 객체나 배열을 변수로 '분해'할 수 있게 해주는 특별한 문법인 *구조 분해 할당(destructuring assignment)* 을 사용할 수 있습니다. 이 외에도 함수의 매개변수가 많거나 매개변수 기본값이 필요한 경우 등에서 구조 분해(destructuring)는 그 진가를 발휘합니다.
+*Destructuring assignment* is a special syntax that allows us to "unpack" arrays or objects into a bunch of variables, as sometimes that's more convenient.
## 배열 분해하기
@@ -69,7 +70,6 @@ alert( title ); // Consul
let [a, b, c] = "abc"; // ["a", "b", "c"]
let [one, two, three] = new Set([1, 2, 3]);
```
-
````
diff --git a/1-js/05-data-types/12-json/article.md b/1-js/05-data-types/12-json/article.md
index 129de10388..35a0c0ee94 100644
--- a/1-js/05-data-types/12-json/article.md
+++ b/1-js/05-data-types/12-json/article.md
@@ -178,7 +178,7 @@ JSON.stringify(meetup); // Error: Converting circular structure to JSON
`JSON.stringify`의 전체 문법은 아래와 같습니다.
```js
-let json = JSON.stringify(value[, replacer, space])
+let json = JSON.stringify(value, [replacer, space])
```
value
diff --git a/1-js/06-advanced-functions/01-recursion/article.md b/1-js/06-advanced-functions/01-recursion/article.md
index b4961d0689..9cb2855435 100644
--- a/1-js/06-advanced-functions/01-recursion/article.md
+++ b/1-js/06-advanced-functions/01-recursion/article.md
@@ -234,7 +234,7 @@ function pow(x, n) {
이젠 호출해야 할 중첩 호출이 없습니다. 따라서 함수는 종료되고 `2`가 반환됩니다.
-함수가 종료되었기 때문에 이에 상응하는 실행 컨텍스트는 쓸모가 없어졌습니다. 따라서 해당 실행 컨텍스트는 메모리에서 삭제됩니다. 스택 맨 위엔 이전의 실행 컨텍스가 위치하게 됩니다.
+함수가 종료되었기 때문에 이에 상응하는 실행 컨텍스트는 쓸모가 없어졌습니다. 따라서 해당 실행 컨텍스트는 메모리에서 삭제됩니다. 스택 맨 위엔 이전의 실행 컨텍스트가 위치하게 됩니다.
diff --git a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md
index da299578be..ce8317e02c 100644
--- a/1-js/06-advanced-functions/02-rest-parameters-spread/article.md
+++ b/1-js/06-advanced-functions/02-rest-parameters-spread/article.md
@@ -1,4 +1,4 @@
-# 나머지 매개변수와 스프레드 문법
+# 나머지 매개변수와 전개 구문
상당수의 자바스크립트 내장 함수는 인수의 개수에 제약을 두지 않습니다.
@@ -148,7 +148,7 @@ alert( Math.max(arr) ); // NaN
`Math.max (arr[0], arr[1], arr[2])` 처럼 배열 요소를 수동으로 나열하는 방법도 있긴 한데, 배열 길이를 알 수 없을 때는 이마저도 불가능합니다. 스크립트가 돌아갈 때 실제 넘어오는 배열의 길이는 아주 길 수도 있고, 아예 빈 배열일 수도 있기 때문입니다. 수동으로 이걸 다 처리하다 보면 코드가 지저분해지겠죠.
-*스프레드 문법(spread syntax, 전개 문법)* 은 이럴 때 사용하기 위해 만들어졌습니다. `...`를 사용하기 때문에 나머지 매개변수와 비슷해 보이지만, 스프레드 문법은 나머지 매개변수와 반대되는 역할을 합니다.
+*전개 구문(spread syntax, 스프레드 구문)* 은 이럴 때 사용하기 위해 만들어졌습니다. `...`를 사용하기 때문에 나머지 매개변수와 비슷해 보이지만, 전개 구문은 나머지 매개변수와 반대 역할을 합니다.
함수를 호출할 때 `...arr`를 사용하면, 이터러블 객체 `arr`이 인수 목록으로 '확장'됩니다.
@@ -157,7 +157,7 @@ alert( Math.max(arr) ); // NaN
```js run
let arr = [3, 5, 1];
-alert( Math.max(...arr) ); // 5 (스프레드 문법이 배열을 인수 목록으로 바꿔주었습니다.)
+alert( Math.max(...arr) ); // 5 (전개 구문이 배열을 인수 목록으로 바꿔주었습니다.)
```
아래와 같이 이터러블 객체 여러 개를 전달하는 것도 가능합니다.
@@ -179,7 +179,7 @@ let arr2 = [8, 3, -8, 1];
alert( Math.max(1, ...arr1, 2, ...arr2, 25) ); // 25
```
-스프레드 문법은 배열을 합칠 때도 활용할 수 있습니다.
+전개 구문은 배열을 합칠 때도 활용할 수 있습니다.
```js run
let arr = [3, 5, 1];
@@ -192,7 +192,7 @@ let merged = [0, ...arr, 2, ...arr2];
alert(merged); // 0,3,5,1,2,8,9,15 (0, arr, 2, arr2 순서로 합쳐집니다.)
```
-앞선 예시들에선 '배열'을 대상으로 스프레드 문법이 어떻게 동작하는지 살펴보았습니다. 그런데 배열이 아니더라도 이터러블 객체이면 스프레드 문법을 사용할 수 있습니다.
+앞선 예시들에선 '배열'을 대상으로 전개 구문이 어떻게 동작하는지 살펴보았습니다. 그런데 배열이 아니더라도 이터러블 객체이면 전개 구문을 사용할 수 있습니다.
스프레드 문법을 사용해 문자열을 문자 배열로 변환 시켜 보겠습니다.
@@ -202,7 +202,7 @@ let str = "Hello";
alert( [...str] ); // H,e,l,l,o
```
-스프레드 문법은 `for..of`와 같은 방식으로 내부에서 이터레이터(iterator, 반복자)를 사용해 요소를 수집합니다.
+전개 구문은 `for..of`와 같은 방식으로 내부에서 이터레이터(iterator, 반복자)를 사용해 요소를 수집합니다.
문자열에 `for..of`를 사용하면 문자열을 구성하는 문자가 반환됩니다. `...str`도 `H,e,l,l,o`가 되는데, 이 문자 목록은 배열 초기자(array initializer) `[...str]`로 전달됩니다.
@@ -222,7 +222,7 @@ alert( Array.from(str) ); // H,e,l,l,o
- `Array.from`은 유사 배열 객체와 이터러블 객체 둘 다에 사용할 수 있습니다.
- 스프레드 문법은 이터러블 객체에만 사용할 수 있습니다.
-이런 이유때문에 무언가를 배열로 바꿀 때는 스프레드 문법보다 `Array.from`이 보편적으로 사용됩니다.
+이런 이유때문에 무언가를 배열로 바꿀 때는 전개 구문보다 `Array.from`이 보편적으로 사용됩니다.
## 배열과 객체의 복사본 만들기
@@ -267,14 +267,14 @@ alert(JSON.stringify(obj)); // {"a":1,"b":2,"c":3,"d":4}
alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}
```
-이렇게 스프레드 문법을 사용하면 `let objCopy = Object.assign({}, obj);`, `let arrCopy = Object.assign([], arr);`보다 더 짧은 코드로 배열이나 객체를 복사할 수 있어서 사람들은 이 방법을 선호하는 편입니다.
+이렇게 전개 구문을 사용하면 `let objCopy = Object.assign({}, obj);`, `let arrCopy = Object.assign([], arr);`보다 더 짧은 코드로 배열이나 객체를 복사할 수 있어서 사람들은 이 방법을 선호합니다.
## 요약
`"..."`은 나머지 매개변수나 스프레드 문법으로 사용할 수 있습니다.
-나머지 매개변수와 스프레드 문법은 아래의 방법으로 구분할 수 있습니다.
+나머지 매개변수와 전개 구문은 아래의 방법으로 구분할 수 있습니다.
- `...`이 함수 매개변수의 끝에 있으면 인수 목록의 나머지를 배열로 모아주는 '나머지 매개변수'입니다.
- `...`이 함수 호출 시 사용되거나 기타 경우엔 배열을 목록으로 확장해주는 '스프레드 문법'입니다.
@@ -282,7 +282,7 @@ alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}
사용 패턴:
- 인수 개수에 제한이 없는 함수를 만들 때 나머지 매개변수를 사용합니다.
-- 다수의 인수를 받는 함수에 배열을 전달할 때 스프레드 문법을 사용합니다.
+- 다수의 인수를 받는 함수에 배열을 전달할 때 전개 구문을 사용합니다.
둘을 함께 사용하면 매개변수 목록과 배열 간 전환을 쉽게 할 수 있습니다.
diff --git a/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/solution.md b/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/solution.md
index 7cbd85ab75..ce33d34c0f 100644
--- a/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/solution.md
+++ b/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/solution.md
@@ -1,5 +1,5 @@
-The answer is: **Pete**.
+정답은 **지민**입니다.
-A function gets outer variables as they are now, it uses the most recent values.
+함수는 외부 변수의 현재 값 즉, 가장 최신의 값을 사용합니다.
-Old variable values are not saved anywhere. When a function wants a variable, it takes the current value from its own Lexical Environment or the outer one.
+이전 값은 어디에도 저장되지 않습니다. 함수에서 변숫값을 사용할 땐 해당 함수의 렉시컬 환경 또는 외부 렉시컬 환경에서 해당 변숫값을 찾습니다.
diff --git a/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/task.md b/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/task.md
index 819189773c..d5e4cee171 100644
--- a/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/task.md
+++ b/1-js/06-advanced-functions/03-closure/1-closure-latest-changes/task.md
@@ -2,22 +2,22 @@ importance: 5
---
-# Does a function pickup latest changes?
+# 함수가 최신 변경 사항을 반영할까요?
-The function sayHi uses an external variable name. When the function runs, which value is it going to use?
+함수 `sayHi`는 외부 변수 `name`을 사용하고 있는데, 함수가 실행될 때 두 외부 변수 `name` 중 어떤 값이 사용될까요?
```js
-let name = "John";
+let name = "보라";
function sayHi() {
- alert("Hi, " + name);
+ alert(name + "님, 안녕하세요.");
}
-name = "Pete";
+name = "지민";
-sayHi(); // what will it show: "John" or "Pete"?
+sayHi(); // "보라" 혹은 "지민" 중 무엇이 출력될까요?
```
-Such situations are common both in browser and server-side development. A function may be scheduled to execute later than it is created, for instance after a user action or a network request.
+이런 상황은 클라이언트, 서버 개발 모두에서 흔하게 발생합니다. 함수는 이미 생성되어 있는데, 사용자의 특정 작업 이후나 네트워크 요청 이후같이 특정 조건을 만족한 후에 함수 호출을 하게 되는 경우는 종종 발생합니다.
-So, the question is: does it pick up the latest changes?
+자, 그럼 다시 질문으로 돌아가 봅시다. 이 함수는 `name` 변경 사항을 반영할까요?
diff --git a/1-js/06-advanced-functions/03-closure/2-closure-variable-access/solution.md b/1-js/06-advanced-functions/03-closure/2-closure-variable-access/solution.md
index 0a522132fe..0ad5203e2c 100644
--- a/1-js/06-advanced-functions/03-closure/2-closure-variable-access/solution.md
+++ b/1-js/06-advanced-functions/03-closure/2-closure-variable-access/solution.md
@@ -1,9 +1,9 @@
-The answer is: **Pete**.
+정답은 **Pete**입니다.
-The `work()` function in the code below gets `name` from the place of its origin through the outer lexical environment reference:
+`work()` 함수는 만들어진 곳을 기준으로 외부 렉시컬 변수 참조를 통해 `name`을 가져옵니다.

-So, the result is `"Pete"` here.
+그래서 결과는 `"Pete"`입니다.
-But if there were no `let name` in `makeWorker()`, then the search would go outside and take the global variable as we can see from the chain above. In that case the result would be `"John"`.
+만약 `makeWorker()` 함수 내부에 `let name`가 없었다면 바로 전역 스코프에 해당하는 외부에서 변수를 검색해서 `"John"`이 출력되었을 겁니다.
diff --git a/1-js/06-advanced-functions/03-closure/2-closure-variable-access/task.md b/1-js/06-advanced-functions/03-closure/2-closure-variable-access/task.md
index d12a385c81..33d962047f 100644
--- a/1-js/06-advanced-functions/03-closure/2-closure-variable-access/task.md
+++ b/1-js/06-advanced-functions/03-closure/2-closure-variable-access/task.md
@@ -2,28 +2,28 @@ importance: 5
---
-# Which variables are available?
+# 어떤 변수가 사용될까요?
-The function `makeWorker` below makes another function and returns it. That new function can be called from somewhere else.
+아래 `makeWorker` 함수는 내부에서 다른 함수를 만들고 해당 함수를 반환합니다. 반환된 새 함수는 다른 어딘가에서 호출할 수 있습니다.
-Will it have access to the outer variables from its creation place, or the invocation place, or both?
+새롭게 반환된 함수는 생성된 곳을 기억하고 그곳의 외부 변수에 접근할까요, 아니면 호출된 위치를 기준으로 외부 변수에 접근할까요? 아니면 둘 다일까요?
```js
function makeWorker() {
let name = "Pete";
- return function() {
+ return function () {
alert(name);
};
}
let name = "John";
-// create a function
+// 함수를 만듭니다.
let work = makeWorker();
-// call it
-work(); // what will it show?
+// 함수를 호출합니다.
+work(); // 무엇이 나올까요?
```
-Which value it will show? "Pete" or "John"?
+"Pete", "John" 중 어떤 어떤 값이 출력될까요?
diff --git a/1-js/06-advanced-functions/03-closure/7-let-scope/solution.md b/1-js/06-advanced-functions/03-closure/7-let-scope/solution.md
index 346e4060a3..7ff607f201 100644
--- a/1-js/06-advanced-functions/03-closure/7-let-scope/solution.md
+++ b/1-js/06-advanced-functions/03-closure/7-let-scope/solution.md
@@ -1,6 +1,6 @@
-The result is: **error**.
+에러가 발생합니다.
-Try running it:
+실제 코드를 실행해 봅시다.
```js run
let x = 1;
@@ -15,20 +15,20 @@ function func() {
func();
```
-In this example we can observe the peculiar difference between a "non-existing" and "uninitialized" variable.
+이 문제는 '존재하지 않는' 변수와 '초기화되지 않은' 변수의 미묘한 차이를 알아보기 위해 만들어졌습니다.
-As you may have read in the article [](info:closure), a variable starts in the "uninitialized" state from the moment when the execution enters a code block (or a function). And it stays uninitalized until the corresponding `let` statement.
+[](info:closure)에서 읽은 것처럼 코드 블록(또는 함수) 실행에 들어가는 순간에 그 안의 변수는 '초기화되지 않은' 상태가 됩니다. 그리고 `let`을 만날 때까지 해당 상태가 유지됩니다.
-In other words, a variable technically exists, but can't be used before `let`.
+'초기화되지 않은' 상태의 변수는 기술적으론 존재하지만 `let` 문을 만나기 전엔 사용할 수 없습니다.
-The code above demonstrates it.
+문제의 코드는 이런 초기화되기 전의 변수에 접근할 때 무슨 일이 일어나는지를 잘 보여줍니다.
```js
function func() {
*!*
- // the local variable x is known to the engine from the beginning of the function,
- // but "unitialized" (unusable) until let ("dead zone")
- // hence the error
+ // 엔진은 함수가 시작될 때 로컬 변수 x의 존재를 알고 있지만
+ // let 문이 실행될 때까지 x는 '초기화되지 않은' 상태(dead zone)이기 때문에
+ // 에러가 발생합니다.
*/!*
console.log(x); // ReferenceError: Cannot access 'x' before initialization
@@ -37,4 +37,4 @@ function func() {
}
```
-This zone of temporary unusability of a variable (from the beginning of the code block till `let`) is sometimes called the "dead zone".
+실제 초기화가 일어나기 전 변수를 일시적 사용하지 못하는 구간(코드 블록의 시작부터 `let`이 나올 때까지)을 '데드 존(dead zone)'이라 부릅니다.
diff --git a/1-js/06-advanced-functions/03-closure/7-let-scope/task.md b/1-js/06-advanced-functions/03-closure/7-let-scope/task.md
index fb7445e66a..98f3f43003 100644
--- a/1-js/06-advanced-functions/03-closure/7-let-scope/task.md
+++ b/1-js/06-advanced-functions/03-closure/7-let-scope/task.md
@@ -2,9 +2,9 @@ importance: 4
---
-# Is variable visible?
+# 변수가 보일까요?
-What will be the result of this code?
+다음 코드를 실행했을 때 어떤 값이 출력될까요?
```js
let x = 1;
@@ -18,4 +18,4 @@ function func() {
func();
```
-P.S. There's a pitfall in this task. The solution is not obvious.
+주의: 이 문제에는 함정이 있습니다. 뻔한 답을 떠올리지 마세요.
diff --git a/1-js/06-advanced-functions/03-closure/article.md b/1-js/06-advanced-functions/03-closure/article.md
index 803652fa94..225e510094 100644
--- a/1-js/06-advanced-functions/03-closure/article.md
+++ b/1-js/06-advanced-functions/03-closure/article.md
@@ -175,7 +175,7 @@ alert( counter() ); // 2
이렇게 스크립트 전체와 관련된 렉시컬 환경은 전역 렉시컬 환경(global Lexical Environment)이라고 합니다.
-위 그림에서 네모 상자는 변수가 저장되는 환경 레코드를 나타내고 붉은 화살표는 외부 렉시컬 환경에 대한 참조를 나타냅니다. 전역 렉시컬 환경은 외부 참조를 갖지 않기 때문에 화살표가 `null`을 가리키는 걸 확인할 수 있습니다.
+위 그림에서 네모 상자는 변수가 저장되는 환경 레코드(1)를 나타내고 네모 상자 옆, 오른쪽을 향하는 화살표는 외부 렉시컬 환경에 대한 참조(2)를 나타냅니다. 전역 렉시컬 환경은 외부 참조를 갖지 않기 때문에 화살표가 `null`을 가리키는 걸 확인할 수 있습니다.
코드가 실행되고 실행 흐름이 이어져 나가면서 렉시컬 환경은 변화합니다.
@@ -185,7 +185,7 @@ alert( counter() ); // 2
우측의 네모 상자들은 코드가 한 줄, 한 줄 실행될 때마다 전역 렉시컬 환경이 어떻게 변화하는지 보여줍니다.
-1. 스크립트가 시작되면 스크립트 내에서 선언한 변수 전체가 렉시컬 환경에 올라갑니다(pre-populated).
+1. 스크립트가 시작되면(execution start) 스크립트 내에서 선언한 변수 전체가 렉시컬 환경에 올라갑니다(pre-populated).
- 이때 변수의 상태는 특수 내부 상태(special internal state)인 'uninitialized'가 됩니다. 자바스크립트 엔진은 uninitialized 상태의 변수를 인지하긴 하지만, `let`을 만나기 전까진 이 변수를 참조할 수 없습니다.
2. `let phrase`가 나타났네요. 아직 값을 할당하기 전이기 때문에 프로퍼티 값은 `undefined`입니다. `phrase`는 이 시점 이후부터 사용할 수 있습니다.
3. `phrase`에 값이 할당되었습니다.
@@ -220,9 +220,9 @@ alert( counter() ); // 2
### 단계 3. 내부와 외부 렉시컬 환경
-함수를 호출해 실행하면 새로운 렉시컬 환경이 자동으로 만들어집니다. 이 렉시컬 환경엔 함수 호출 시 넘겨받은 매개변수와 함수의 지역 변수가 저장됩니다.
+함수를 호출해 실행하면 새로운 렉시컬 환경이 자동으로 만들어집니다. 이 렉시컬 환경엔 함수 호출 시 넘겨받은 매개변수와 함수의 지역 변수가 저장됩니다.
-`say("John")`을 호출하면 아래와 같은 내부 변화가 일어납니다(현재 실행 흐름은 붉은색 화살표로 나타낸 줄에 멈춰있는 상황입니다).
+`say("John")`을 호출하면 아래와 같은 내부 변화가 일어납니다(현재 실행 흐름은 함수 내부, 화살표로 표시한 줄(alert 문)에 멈춰있는 상황입니다).