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/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/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 문)에 멈춰있는 상황입니다).