You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/12-arrow-functions/article.md
+18-18Lines changed: 18 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@
4
4
5
5
화살표 함수는 단순히 함수를 '짧게' 쓰기 위한 용도로 사용되지 않습니다. 화살표 함수는 몇 가지 독특하고 유용한 기능을 제공합니다.
6
6
7
-
자바스크립트를 사용하다 보면 저 멀리 동떨어진 곳에서 실행될 작은 함수를 작성해야 하는 상황을 자주 만나게 됩니다.
7
+
자바스크립트를 사용하다 보면 저 멀리 동떨어진 곳에서 실행될 작은 함수를 작성해야 하는 상황을 자주 만나게 됩니다.
8
8
9
9
예시:
10
10
@@ -14,11 +14,11 @@
14
14
15
15
이처럼 자바스크립트에선 함수를 생성하고 그 함수를 어딘가에 전달하는 것이 아주 자연스럽습니다.
16
16
17
-
그런데 이렇게 어딘가에 함수를 전달하게 되면 함수의 컨텍스트를 읽을 수 있습니다. 이럴 때 화살표 함수를 사용하면 현재 컨택스트를 잃지 않아 편리합니다.
17
+
그런데 어딘가에 함수를 전달하게 되면 함수의 컨텍스트를 잃을 수 있습니다. 이럴 때 화살표 함수를 사용하면 현재 컨텍스트를 잃지 않아 편리합니다.
18
18
19
-
## 화살표 함수에는 'this'가 없습니다.
19
+
## 화살표 함수에는 'this'가 없습니다
20
20
21
-
<info:object-methods> 챕터에서 화살표 함수엔 `this`가 없다는 것을 배운 바 있습니다. 화살표 함수 본문에서 `this`에 접근하면, 그 값은 외부에서 가져오게 됩니다.
21
+
<info:object-methods> 챕터에서 화살표 함수엔 `this`가 없다는 것을 배운 바 있습니다. 화살표 함수 본문에서 `this`에 접근하면, 외부에서 값을 가져옵니다.
22
22
23
23
이런 특징은 객체의 메서드(`showList()`) 안에서 동일 객체의 프로퍼티(`students`)를 대상으로 순회를 하는 데 사용할 수 있습니다.
24
24
@@ -39,7 +39,7 @@ let group = {
39
39
group.showList();
40
40
```
41
41
42
-
예시의 `forEach`에서 화살표 함수를 사용했기 때문에 화살표 함수 본문에 있는 `this.title`은 화살표 함수 바깥에 있는 메서드인 `showList`가 가리키는 대상과 동일합니다. `this.title`은 `group.title`과 같죠.
42
+
예시의 `forEach`에서 화살표 함수를 사용했기 때문에 화살표 함수 본문에 있는 `this.title`은 화살표 함수 바깥에 있는 메서드인 `showList`가 가리키는 대상과 동일해집니다. 즉 `this.title`은 `group.title`과 같습니다.
43
43
44
44
위 예시에서 화살표 함수 대신 '일반' 함수를 사용했다면 에러가 발생했을 겁니다.
45
45
@@ -61,28 +61,28 @@ let group = {
61
61
group.showList();
62
62
```
63
63
64
-
에러는 `forEach`에 전달되는 함수의 `this`가 `undefined` 이어서 발생했습니다. `alert` 함수에서 `undefined.title`에 접근하려 했기 때문에 얼럿창엔 위와 같은 에러가 출력됩니다.
64
+
에러는 `forEach`에 전달되는 함수의 `this`가 `undefined` 이어서 발생했습니다. `alert` 함수에서 `undefined.title`에 접근하려 했기 때문에 얼럿 창엔 에러가 출력됩니다.
65
65
66
-
화살표 함수는 `this` 자체가 없기 때문에 이런 에러가 발생하지 않습니다.
66
+
그런데 화살표 함수는 `this` 자체가 없기 때문에 이런 에러가 발생하지 않습니다.
67
67
68
68
```warn header="화살표 함수는 `new`와 함께 실행할 수 없습니다."
69
69
`this`가 없기 때문에 화살표 함수는 생성자 함수로 사용할 수 없다는 제약이 있습니다. 화살표 함수는 `new`와 함께 호출할 수 없습니다.
70
70
```
71
71
72
72
```smart header="화살표 함수 vs. bind"
73
-
화살표 함수의 `=>`와 일반 함수를 `.bind(this)`를 사용해서 호출하는 것 사이에는 미묘한 차이가 있습니다.
73
+
화살표 함수와 일반 함수를 `.bind(this)`를 사용해서 호출하는 것 사이에는 미묘한 차이가 있습니다.
74
74
75
75
- `.bind(this)`는 함수의 '한정된 버전(bound version)'을 만듭니다.
76
-
- 화살표 함수의 `=>`는 어떤 것도 바인딩시키지 않습니다. 화살표 함수엔 단지 `this`가 없을 뿐입니다. 화살표 함수에서 `this`가 사용된 경우엔 일반적인 변수 검색과 마찬가지로 `this`의 값을 외부 렉시컬 환경에서 찾습니다.
76
+
- 화살표 함수는 어떤 것도 바인딩시키지 않습니다. 화살표 함수엔 단지 `this`가 없을 뿐입니다. 화살표 함수에서 `this`를 사용하면 일반 변수 서칭과 마찬가지로 `this`의 값을 외부 렉시컬 환경에서 찾습니다.
77
77
```
78
78
79
-
## 화살표 함수엔 'arguments'가 없습니다.
79
+
## 화살표 함수엔 'arguments'가 없습니다
80
80
81
-
화살표 함수는 일반 함수와는 다르게 모든 인수에 접근할 수 있게 해주는 `arguments`유사 배열 객체를 지원하지 않습니다.
81
+
화살표 함수는 일반 함수와는 다르게 모든 인수에 접근할 수 있게 해주는 유사 배열 객체 `arguments`를 지원하지 않습니다.
82
82
83
83
이런 특징은 현재 `this` 값과 `arguments` 정보를 함께 실어 호출을 포워딩해 주는 데코레이터를 만들 때 유용하게 사용됩니다.
84
84
85
-
아래 예시에서 데코레이터 `defer(f, ms)`는 함수를 인자로 받고 이 함수를 래퍼로 감싸 반환하는데, 인수로 전달받은 함수를 `ms` 밀리초 후에 호출될 수 있도록 해줍니다.
85
+
아래 예시에서 데코레이터 `defer(f, ms)`는 함수를 인자로 받고 이 함수를 래퍼로 감싸 반환하는데, 함수 `f`는 `ms` 밀리초 후에 호출됩니다.
86
86
87
87
```js run
88
88
functiondefer(f, ms) {
@@ -92,14 +92,14 @@ function defer(f, ms) {
92
92
}
93
93
94
94
functionsayHi(who) {
95
-
alert('Hello, '+ who);
95
+
alert('안녕, '+ who);
96
96
}
97
97
98
98
let sayHiDeferred =defer(sayHi, 2000);
99
-
sayHiDeferred("John"); // 2초 후 Hello, John이 출력됩니다.
99
+
sayHiDeferred("철수"); // 2초 후 "안녕, 철수"가 출력됩니다.
100
100
```
101
101
102
-
화살표 함수 없이 동일한 기능을 하는 데코레이터 함수를 만들면 다음과 같습니다.
102
+
화살표 함수를 사용하지 않고 동일한 기능을 하는 데코레이터 함수를 만들면 다음과 같습니다.
103
103
104
104
```js
105
105
functiondefer(f, ms) {
@@ -112,7 +112,7 @@ function defer(f, ms) {
112
112
}
113
113
```
114
114
115
-
일반 함수에선 `setTimeout` 안의 함수에서 사용할 추가 변수 `args`와 `ctx`를 반드시 만들어줘야 합니다.
115
+
일반 함수에선 `setTimeout`에 넘겨주는 콜백 함수에서 사용할 변수 `ctx`와 `args`를 반드시 만들어줘야 합니다.
116
116
117
117
## 요약
118
118
@@ -121,6 +121,6 @@ function defer(f, ms) {
121
121
-`this`를 가지지 않습니다.
122
122
-`arguments`를 지원하지 않습니다.
123
123
-`new`와 함께 호출할 수 없습니다.
124
-
- 이 외에도 화살표 함수는 `super`가 없다는 특징도 있는데, 아직 `super`에 대해 배우지 않았기 때문에 본 챕터에선 해당 내용을 다루지 않았습니다. 화살표 함수와 `super`의 관계는 <info:class-inheritance> 챕터에서 학습할 예정입니다.
124
+
- 이 외에도 화살표 함수는 `super`가 없다는 특징도 있는데, 아직 `super`에 대해 배우지 않았기 때문에 이번 챕터에선 해당 내용을 다루지 않았습니다. 화살표 함수와 `super`의 관계는 <info:class-inheritance> 챕터에서 학습할 예정입니다.
125
125
126
-
화살표 함수는 컨텍스트가 있는 긴 코드보다는 자체 '컨텍스트'가 없는 짧은 코드를 담을 용도로 만들어졌습니다. 그리고 이 목적에 잘 들어맞는 특징을 지닙니다.
126
+
화살표 함수는 컨텍스트가 있는 긴 코드보다는 자체 '컨텍스트'가 없는 짧은 코드를 담을 용도로 만들어졌습니다. 그리고 이 목적에 잘 들어맞는 특징을 보입니다.
0 commit comments