File tree Expand file tree Collapse file tree 6 files changed +26
-6
lines changed Expand file tree Collapse file tree 6 files changed +26
-6
lines changed Original file line number Diff line number Diff line change @@ -67,7 +67,7 @@ Function의 [`arguments` 객체](#function.arguments)와 기본 프로퍼티도
67
67
68
68
### Host 객체
69
69
70
- (역주, Host 객체들은 document같은 DOM 객체를 말한다.)
70
+ > ** 역주: ** Host 객체는 document같은 DOM 객체를 말한다.
71
71
72
72
Host 객체를 delete하면 어떻게 될지 알 수 없다. 표준에는 어떻게 Host 객체를 delete해야 하는지 정의하지 않았다.
73
73
Original file line number Diff line number Diff line change @@ -13,11 +13,16 @@ JavaScript는 `nothing`을 두 가지로 표현할 수 있고 그중 `undefined`
13
13
` undefined ` 값이 반환될 때:
14
14
15
15
- global 변수 ` undefined ` 에 접근할 때.
16
+ - 아직 초기화하지 않은 변수
17
+ - ` return ` 구문이 없는 함수는 ` undefined ` 를 반환함.
16
18
- ` return ` 구문이 없는 함수는 ` undefined ` 를 반환함.
17
19
- ` return ` 구문으로 아무것도 반환하지 않을 때.
18
20
- 없는 프로퍼티를 찾을 때.
19
21
- 함수 인자가 생략될 때.
20
22
- ` undefined ` 가 할당된 모든 것.
23
+ - ` void(expression) ` 형식으로 된 표현
24
+
25
+ > ** 역주:** 예를 들어 CoffeeScript Compliler는 CoffeeScript의 ` undefined ` 를 JavaScript의 ` void 0 ` 로 컴파일한다.
21
26
22
27
### ` undefined ` 가 바뀔 때를 대비하기
23
28
Original file line number Diff line number Diff line change 2
2
3
3
JavaScript에서 생성자는 다른 언어들과 다르게 ` new ` 키워드로 호출되는 함수가 생성자다.
4
4
5
- 어쨌든 생성자로 호출된 함수의 this는 막 만들어진 객체를 참조한다. ** 막 만든** 객체의 [ ` prototype ` ] ( #object.prototype ) 에는 생성자의 prototype이 할당된다.
5
+ 어쨌든 생성자로 호출된 함수의 this는 막 만들어진 객체를 참조한다. ** 막 만든** 객체의 [ prototype] ( #object.prototype ) 에는 생성자의 prototype이 할당된다.
6
6
7
7
생성자에 ` return ` 구문이 없으면 this가 가리키는 객체를 반환한다.
8
8
Original file line number Diff line number Diff line change @@ -176,11 +176,13 @@ Unnamed Function은 [expressions](#function.general)이기 때문에 호출되
176
176
) // 그리고 Function 객체를 반환한다.
177
177
() // Evaluation된 결과를 호출한다.
178
178
179
- 같은 표기법이 두 가지 더 있다. 문법은 다르지만 똑같다.
179
+ Function을 Evaluate하고 바로 호출하는 방법이 몇가지 더 있다. 문법은 다르지만 똑같다.
180
180
181
- // 두 가지 다른 방법
181
+ // Fucntion을 Evaluate하자마자 호출하는 방법들...
182
+ !function(){}();
182
183
+function(){}();
183
184
(function(){}());
185
+ // 등등...
184
186
185
187
### 결론
186
188
Original file line number Diff line number Diff line change @@ -34,6 +34,10 @@ JavaScript는 `hasOwnProperty` 프로퍼티도 보호해주지 않는다. 그래
34
34
// 다른 객체의 hasOwnProperty를 사용하여 foo 객체의 프로퍼티 유무를 확인한다.
35
35
({}).hasOwnProperty.call(foo, 'bar'); // true
36
36
37
+ // Object에 원래 있는 hasOwnProperty를 사용해도 된다.
38
+ Object.prototype.hasOwnProperty.call(obj, 'bar'); // true
39
+
40
+
37
41
### 결론
38
42
39
43
객체에 프로퍼티가 있는지 ` hasOwnProperty ` 로만 확인할 수 있다. [ ` for in ` loop] ( #object.forinloop ) 은 항상 ` hasOwnProperty ` 와 함께 사용해야 한다. 네이티브 객체의 [ 프로토타입] ( #object.prototype ) 을 확장하는 사태가 일어나도 안전하게 지켜줄 것이다.
Original file line number Diff line number Diff line change @@ -61,14 +61,23 @@ JavaScript 엔진의 단위 시간(timer resolution)에 따라서 코드를 실
61
61
62
62
### timeout을 전부 없애기
63
63
64
- 등록한 timeout과 interval을 한꺼번에 삭제하는 메소드는 없다. 구현해서 사용해야 한다.
64
+ 등록한 timeout과 interval을 한꺼번에 제거하는 메소드는 없다. 구현해서 사용해야 한다.
65
65
66
66
// clear "all" timeouts
67
67
for(var i = 1; i < 1000; i++) {
68
68
clearTimeout(i);
69
69
}
70
70
71
- Id가 1부터 1000 사이에 있는 timeout들을 삭제했지만, 그 외의 것은 아직 남아있다. 완벽하게 구현하려면 만들어진 timeout id를 모두 저장했다가 삭제해야 한다.
71
+ Id가 1부터 1000 사이에 있는 timeout들을 제거했지만, 그 외의 것은 아직 남아있다. 또 다른 방법이 있다. ` setTimeout ` 은 항상 호출될 때마다 전보다 1만큼 큰 수를 ID로 반환한다. 이 점을 이용해 1부터 가장최근 ID까지 모두 삭제할 수 있다.
72
+
73
+ // clear "all" timeouts
74
+ var biggestTimeoutId = window.setTimeout(function(){}, 1),
75
+ i;
76
+ for(i = 1; i <= biggestTimeoutId; i++) {
77
+ clearTimeout(i);
78
+ }
79
+
80
+ 이 방법은 모든 주요 브라우저에서 문제없이 잘 동작한다. 하지만 ID가 항상 순차적이어야 한다고 표준에 명시된 것이 아니다. 그러므로 timeout ID를 모두 저장했다가 삭제하는 것이 가장 안전하다. 그러면 전부 깨끗하게 제거할 수 있다.
72
81
73
82
### 숨겨진 ` eval `
74
83
You can’t perform that action at this time.
0 commit comments