Skip to content

Commit 34c3271

Browse files
committed
Merge pull request BonsaiDen#121 from pismute/ko
[ko] proofreading
2 parents e7c00d8 + 09b4f9c commit 34c3271

21 files changed

+128
-130
lines changed

doc/ko/array/constructor.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## `Array` 생성자
22

3-
`Array` 생성자가 파라미터를 처리하는 방법은 모호하기 때문에 항상 `[]` 노테이션으로 Array를 만들어야 한다.
3+
`Array` 생성자가 파라미터를 처리하는 방법은 모호하다. 그래서 항상 `[]` 노테이션으로 Array를 만들어야 한다.
44

55
[1, 2, 3]; // Result: [1, 2, 3]
66
new Array(1, 2, 3); // Result: [1, 2, 3]
@@ -9,13 +9,13 @@
99
new Array(3); // Result: []
1010
new Array('3') // Result: ['3']
1111

12-
`Array` 생성자에 인자로 숫자 하나를 넘기면 생성자는 `length`가 그 숫자인 텅 빈 `Array` 하나를 반환한다. 생성자는 **오직** `length` 프로퍼티에 할당하기만 하고 실제 `Array`는 초기화하지 않는다는 것을 기억해야 한다.
12+
`Array` 생성자에 인자로 숫자를 넘기면 `length`가 그 숫자인 텅 빈 `Array` 하나를 반환된다. 생성자는 **오직** `length` 프로퍼티에 그 숫자를 할당하기만 하고 `Array`실제로 초기화하지 않는다.
1313

1414
var arr = new Array(3);
1515
arr[1]; // undefined
1616
1 in arr; // false, 이 인덱스는 초기화되지 않음.
1717

18-
Array의 length 프로퍼티에 숫자를 할당해주는 이 기능이 유용할 때도 있긴 있다. `for loop`을 사용하지 않고 스트링을 더하는 경우가 그렇다.
18+
Array의 length 프로퍼티에 숫자를 할당해주는 이 기능이 유용할 때도 있긴 있다. `for loop`을 사용하지 않고 스트링을 더할 때가 그렇다.
1919

2020
new Array(count + 1).join(stringToRepeat);
2121

doc/ko/array/general.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
## Array Iteration과 프로퍼티
22

3-
JavaScript에서는 Array도 객체지만 Iterate를 할 때 [`for in`](#object.forinloop)을 사용해서 좋을 게 없다.
3+
JavaScript에서는 Array도 객체 Iterate를 할 때 [`for in`](#object.forinloop)을 사용해서 좋을 게 없다. 실제로 Array에 `for in`을 사용하지 말아야 할 근거가 매우 많다.
44

5-
> **Note:** JavaScript의 Array는 *Associative Array***아니다**. JavaScript [객체](#object.general)는 key/value만 mapping 할 뿐이다. Associative Array는 순서를 보장하지만, 객체는 보장하지 않는다.
5+
> **Note:** JavaScript의 Array는 *Associative Array***아니다**. JavaScript [객체](#object.general)는 key/value만 Mapping할 뿐이다. Associative Array는 순서를 보장하지만, 객체는 보장하지 않는다.
66
77
`for in`은 프로토타입 체인에 있는 프로퍼티를 모두 훑는(enumerate) 데다가 객체 자신의 프로퍼티만 훑으려면 [`hasOwnProperty`](#object.hasownproperty)를 사용해야 하기 때문에 `for`보다 20배 느리다.
88

99
### Iteration
1010

11-
Array를 Iterate 할 때에는 구식인 `for`를 사용하는 것이 가장 빠르다.
11+
Array를 Iterate할 때에는 구식인 `for`를 사용하는 것이 가장 빠르다.
1212

1313
var list = [1, 2, 3, 4, 5, ...... 100000000];
1414
for(var i = 0, l = list.length; i < l; i++) {
1515
console.log(list[i]);
1616
}
1717

18-
예제에서 꼭 기억해야 하는 것은 `l = list.length`로 Array의 length 값을 캐시 했다는 것이다.
18+
예제에서 `l = list.length`로 Array의 length 값을 캐시해야 한다는 것을 꼭 기억해야 한다.
1919

20-
Array에 있는 `length` 프로퍼티를 iterate마다 사용하는 것은 좀 부담스럽다. 최신 JavaScript 엔진은 이 일을 알아서 처리하기도 하지만 코드가 새 엔진에서 실행되도록 보장할 방법이 없다.
20+
매 Iterate마다 Array에 있는 `length` 프로퍼티에 접근하는 것은 좀 부담스럽다. 최신 JavaScript 엔진은 이 일을 알아서 처리해주기도 하지만 코드가 새 엔진에서 실행되도록 보장할 방법이 없다.
2121

2222
실제로 캐시 하지 않으면 성능이 반으로 줄어든다.
2323

2424
### `length` 프로퍼티
2525

26-
`length` 프로퍼티의 *getter*는 단순히 Array 안에 있는 엘리먼트의 개수를 반환하고 *setter*는 할당한 수로 Array를 잘라 버린다.
26+
`length` 프로퍼티의 *getter*는 단순히 Array 안에 있는 엘리먼트의 개수를 반환하고 *setter*Array를 할당한 수만큼 잘라 버린다.
2727

2828
var foo = [1, 2, 3, 4, 5, 6];
2929
foo.length = 3;
@@ -32,8 +32,8 @@ Array에 있는 `length` 프로퍼티를 iterate마다 사용하는 것은 좀
3232
foo.length = 6;
3333
foo; // [1, 2, 3]
3434

35-
현재 크기보다 더 작은 값을 할당하면 Array를 자르지만, 현재 크기보다 더 큰 값을 할당하면 아무것도 하지 않는다.
35+
현재 크기보다 더 작은 값을 할당하면 Array를 자르지만, 현재 크기보다 더 큰 값을 할당한다고 해서 Array를 늘리지 않는다.
3636

3737
### 결론
3838

39-
최적의 성능을 위해서 `for`를 사용하고 `length` 프로퍼티 값을 캐시 하길 바란다. Array에 `for in`을 사용하면 성능도 떨어지고 버그 나기도 쉽다.
39+
최적의 성능을 위해서는 `for`를 사용하고 `length` 프로퍼티 값을 캐시해야 한다. Array에 `for in`을 사용하면 성능도 떨어지고 버그 나기도 쉽다.

doc/ko/core/delete.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
## `delete`
22

3-
간단히 말해서 global 변수, 함수, 등은 `DontDelete` 속성이기 때문에 삭제 못 한다.
3+
간단히 말해서 global 변수, Function, 등은 `DontDelete` 속성이기 때문에 delete하지 못 한다.
44

5-
### Global 코드와 함수 코드
5+
### Global 코드와 Function 코드
66

7-
Global이나 Function scope에 정의된 함수나 변수는 모두 Activation 객체나 Global 객체의 프로퍼티다. 이 프로퍼티는 모두 `DontDelete`속성을 가진다. Global이나 Function 코드에서 변수나 함수의 정의하면 항상 `DontDelete` 프로퍼티로 만들어진다. 그러니까 삭제할 수 없다:
7+
Global이나 Function Scope에 정의한 Fuction이나 변수는 모두 Activation 객체나 Global 객체의 프로퍼티다. 이 프로퍼티는 모두 `DontDelete` 속성을 가진다. Global이나 Function 코드에서 변수나 Function의 정의하면 항상 `DontDelete` 프로퍼티로 만들어진다. 그러니까 delete할 수 없다:
88

99
// Global 변수:
1010
var a = 1; // DontDelete가 설정된다.
1111
delete a; // false
1212
a; // 1
1313

14-
// 함수:
14+
// Function:
1515
function f() {} // DontDelete가 설정된다.
1616
delete f; // false
1717
typeof f; // "function"
@@ -23,7 +23,7 @@ Global이나 Function scope에 정의된 함수나 변수는 모두 Activation
2323

2424
### Explicit 프로퍼티
2525

26-
다음 예제에서 만드는 property는 정상적으로 지워진다. 이런 걸 Explicit 프로퍼티라고 부른다:
26+
다음 예제에서 만드는 프로퍼티는 delete할 수 있다. 이런 걸 Explicit 프로퍼티라고 부른다:
2727

2828
// Explicit 프로퍼티를 만든다:
2929
var obj = {x: 1};
@@ -33,24 +33,24 @@ Global이나 Function scope에 정의된 함수나 변수는 모두 Activation
3333
obj.x; // undefined
3434
obj.y; // undefined
3535

36-
`obj.x``obj.y``DontDelete` 속성이 아녀서 삭제된다. 그러나 다음과 같은 코드도 잘 동작하기 때문에 헷갈린다.:
36+
`obj.x``obj.y``DontDelete` 속성이 아니라서 delete할 수 있다. 그러나 다음과 같은 코드도 잘 동작하기 때문에 헷갈린다:
3737

38-
// IE를 빼고 잘 동작한다.:
38+
// IE를 빼고 잘 동작한다:
3939
var GLOBAL_OBJECT = this;
4040
GLOBAL_OBJECT.a = 1;
41-
a === GLOBAL_OBJECT.a; // true - 진짜 Global 변순지 확인하는 것
41+
a === GLOBAL_OBJECT.a; // true - 진짜 Global 변수인지 확인하는 것
4242
delete GLOBAL_OBJECT.a; // true
4343
GLOBAL_OBJECT.a; // undefined
4444

45-
[`this`](#function.this)가 Global 객체를 가리키는 것을 이용해서 명시적으로 프로퍼티 `a`를 선언하면 삭제할 수 있다. 이런 꼼수가 가능하다.
45+
[`this`](#function.this)가 Global 객체를 가리키는 것을 이용해서 명시적으로 프로퍼티 `a`를 선언하면 삭제할 수 있다. 이것은 꼼수다.
4646

4747
IE (적어도 6-8)는 버그가 있어서 안 된다.
4848

49-
### arguments와 함수의 기본 프로퍼티
49+
### Argument들과 Function의 기본 프로퍼티
5050

51-
함수의 [`arguments` 객체](#function.arguments)built-in 프로퍼티도 `DontDelete` 속성이다.
51+
Function의 [`arguments` 객체](#function.arguments)기본 프로퍼티도 `DontDelete` 속성이다.
5252

53-
// 함수의 arguments와 프로퍼티:
53+
// Function의 arguments와 프로퍼티:
5454
(function (x) {
5555

5656
delete arguments; // false
@@ -69,7 +69,7 @@ IE (적어도 6-8)는 버그가 있어서 안 된다.
6969

7070
(역주, Host 객체들은 document같은 DOM 객체를 말한다.)
7171

72-
Host 객체를 delete하면 어떻게 될지 알 수 없다. 어떻게 Host 객체를 delete해야 하는지 표준에 정의되지 않았다.
72+
Host 객체를 delete하면 어떻게 될지 알 수 없다. 표준에는 어떻게 Host 객체를 delete해야 하는지 정의하지 않았다.
7373

7474
### 결론
7575

doc/ko/core/eval.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727

2828
### 가짜 `eval`
2929

30-
[timeout functions](#other.timeouts)`setTimeout``setInterval`은 첫 번째 인자로 스트링을 입력받을 수 있다. 이 경우에는 `eval`을 직접 호출하는 것이 아녀서 항상 global scope에서 실행된다.
30+
[`setTimeout``setInterval`](#other.timeouts)은 첫 번째 인자로 스트링을 입력받을 수 있다. 이 경우에는 `eval`을 직접 호출하는 것이 아니라서 항상 Global Scope에서 실행된다.
3131

3232
### 보안 이슈
3333

3434
`eval`은 보안 문제도 있다. 단순히 **모든** 코드를 실행하기 때문에 신뢰하지 못하는 코드가 **절대로** 포함되지 않도록 주의해야 한다.
3535

3636
### 결론
3737

38-
`eval`은 사용하지 않는 게 좋다. `eval`을 사용하는 모든 코드는 성능, 보안, 버그의 문제를 일으킬 수 있다. 만약 `eval`이 필요해지면 *설계를 변경*하여 `eval`이 필요 없게 만들어야 한다.
38+
`eval`은 사용하지 않는 게 좋다. `eval`을 사용하는 모든 코드는 성능, 보안, 버그 문제를 일으킬 수 있다. 만약 `eval`이 필요해지면 *설계를 변경*하여 `eval`이 필요 없게 만들어야 한다.

doc/ko/core/semicolon.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
## 세미콜론을 자동으로 삽입해준다.
1+
## 쎄미콜론을 자동으로 삽입해준다.
22

3-
JavaScript는 C와 문법이 비슷하지만, 꼭 코드에 semicolon을 사용하도록 강제하지 않는다. 그래서 생략할 수 있다.
3+
JavaScript는 C와 문법이 비슷하지만, 꼭 코드에 쎄미콜론을 사용하도록 강제하지 않는다. 그래서 생략할 수 있다.
44

5-
사실 JavaScript는 semicolon이 꼭 있어야 하고 없으면 이해하지 못한다. 그래서 JavaScript 파서는 semicolon이 없으면 **자동으로** semicolon을 추가한다.
5+
사실 JavaScript는 쎄미콜론이 꼭 있어야 하고 없으면 이해하지 못한다. 그래서 JavaScript 파서는 쎄미콜론이 없으면 **자동으로** 쎄미콜론을 추가한다.
66

77
var foo = function() {
8-
} // 세미콜론이 없으니 에러 난다.
8+
} // 쎄미콜론이 없으니 에러 난다.
99
test()
1010

11-
파서는 세미콜론을 삽입하고 다시 시도한다.
11+
파서는 쎄미콜론을 삽입하고 다시 시도한다.
1212

1313
var foo = function() {
1414
}; // 에러가 없어짐.
1515
test()
1616

17-
JavaScript에서 세미콜론을 자동으로 삽입한 것은 **대표적인** 설계 오류 중 하나다. 세미콜론 유무에 따라 *전혀* 다른 코드가 될 수 있다.
17+
쎄미콜론을 자동으로 삽입한 것이 **대표적인** JavaScript 설계 오류다. 쎄미콜론 유무에 따라 *전혀* 다른 코드가 될 수 있다.
1818

1919
### 어떻게 다를까?
2020

21-
코드에 세미콜론이 없으면 파서가 어디에 넣을지 결정한다.
21+
코드에 쎄미콜론이 없으면 파서가 어디에 넣을지 결정한다.
2222

2323
(function(window, undefined) {
2424
function test(options) {
@@ -47,12 +47,12 @@ JavaScript에서 세미콜론을 자동으로 삽입한 것은 **대표적인**
4747

4848
})(window)
4949

50-
파서는 다음과 같이 삽입한다.
50+
파서는 이 코드에 쎄미콜론을 다음과 같이 삽입한다.
5151

5252
(function(window, undefined) {
5353
function test(options) {
5454

55-
// 세미콜론을 넣는 것이 아니라 줄을 합친다.
55+
// 쎄미콜론을 넣는 것이 아니라 줄을 합친다.
5656
log('testing!')(options.list || []).forEach(function(i) {
5757

5858
}); // <- 여기
@@ -66,7 +66,7 @@ JavaScript에서 세미콜론을 자동으로 삽입한 것은 **대표적인**
6666
{ // 파서는 단순 블럭이라고 생각하고
6767

6868
// 단순한 레이블과 함수
69-
foo: function() {}
69+
foo: function() {}
7070
}; // <- 여기
7171
}
7272
window.test = test; // <- 여기
@@ -75,15 +75,15 @@ JavaScript에서 세미콜론을 자동으로 삽입한 것은 **대표적인**
7575
})(window)(function(window) {
7676
window.someLibrary = {}; // <- 여기
7777

78-
})(window); //<- 여기에 파서는 세미콜론을 넣는다.
78+
})(window); //<- 여기에 파서는 쎄미콜론을 넣는다.
7979

80-
> **주의:** JavaScript 파서는 new line 문자가 뒤따라 오는 return 구문을 제대로 처리하지 못한다. 자동으로 세미콜론을 넣는 것 자체의 문제는 아니지만 어쨌든 여전히 문제로 남아있다.
80+
> **주의:** JavaScript 파서는 new line 문자가 뒤따라 오는 return 구문을 제대로 처리하지 못한다. 자동으로 쎄미콜론을 넣는 것 자체의 문제는 아니지만 어쨌든 여전히 문제다.
8181
8282
파서는 완전히 다른 코드로 만들어 버린다. 이것은 **오류**다.
8383

8484
### Parenthesis
8585

86-
세미콜론 없이 괄호가 붙어 있으면 파서는 세미콜론을 넣지 않는다.
86+
쎄미콜론 없이 괄호가 붙어 있으면 파서는 쎄미콜론을 넣지 않는다.
8787

8888
log('testing!')
8989
(options.list || []).forEach(function(i) {})
@@ -96,4 +96,4 @@ JavaScript에서 세미콜론을 자동으로 삽입한 것은 **대표적인**
9696

9797
### 결론
9898

99-
세미콜론은 반드시 사용해야 한다. 그리고 `{}`도 생략하지 않고 꼭 사용하는 것이 좋다. 한 줄밖에 안 되는 `if` / `else` 블럭에서도 꼭 사용해야 한다. 이 두 가지 규칙을 잘 지키면 JavaScript 파서가 잘못 해석하는 일을 미리 방지하고 코드도 튼튼해진다.
99+
쎄미콜론은 반드시 사용해야 한다. 그리고 `{}`도 생략하지 않고 꼭 사용하는 것이 좋다. 한 줄밖에 안 되는 `if` / `else` 블럭에서도 꼭 사용해야 한다. 이 두 가지 규칙을 잘 지키면 JavaScript 파서가 잘못 해석하는 일을 미리 방지하고 코드도 튼튼해진다.

doc/ko/core/undefined.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ global 변수 `undefined`는 `undefined`라는 객체를 가리키는 것뿐이
2525

2626
그래서 `undefined`와 비교하려면 먼저 `undefined`의 값을 찾아와야 한다.
2727

28-
보통 `undefined` 변수가 바뀌어 있을 때를 대비해서 undefined라는 변수를 인자로 받는 [anonymous wrapper](#function.scopes)로 감싸고 아무런 인자를 넘기지 않는 꼼수를 사용한다.
28+
`undefined` 변수가 바뀔 때를 대비해서 `undefined`라는 변수를 인자로 받는 [anonymous wrapper](#function.scopes)로 감싸고 아무런 인자를 넘기지 않는 꼼수를 사용한다.
2929

3030
var undefined = 123;
3131
(function(something, foo, undefined) {
@@ -34,7 +34,7 @@ global 변수 `undefined`는 `undefined`라는 객체를 가리키는 것뿐이
3434

3535
})('Hello World', 42);
3636

37-
wrapper 안에서 변수를 새로 정의하는 방법으로도 같은 효과를 볼 수 있다.
37+
wrapper 안에 변수를 새로 정의하는 방법으로도 같은 효과를 볼 수 있다.
3838

3939
var undefined = 123;
4040
(function(something, foo) {
@@ -47,6 +47,6 @@ wrapper 안에서 변수를 새로 정의하는 방법으로도 같은 효과를
4747

4848
### `Null` 객체의 용도
4949

50-
JavaScript 언어에서는 `undefined`를 다른 언어에서 *null*을 사용하듯이 쓰고 진짜 `null`은 그냥 다른 데이터 타입 중 하나일 뿐이다.
50+
JavaScript 언어에서는 `undefined`를 다른 언어의 *null* 처럼 쓴다. 진짜 `null`은 그냥 데이터 타입 중 하나일 뿐이지 더도덜도 아니다.
5151

52-
JavaScript 내부적인 곳에 사용하는 경우가 아니면 null 대신 `undefined`를 사용해도 된다(`Foo.prototype = null`같이 프로토타입 체인을 끊을 때는 null을 사용한다).
52+
JavaScript를 깊숙히 건드리는 것이 아니면 null 대신 `undefined`를 사용해도 된다(`Foo.prototype = null`같이 프로토타입 체인을 끊을 때는 null을 사용한다).

0 commit comments

Comments
 (0)