1
00:00:01,400 --> 00:00:03,840
<v Jonas>Let me now show you some pitfalls</v>

2
00:00:03,840 --> 00:00:07,550
of the this keyword related to regular functions

3
00:00:07,550 --> 00:00:09,460
and arrow functions.

4
00:00:09,460 --> 00:00:13,330
This way we can learn when we should use and avoid

5
00:00:13,330 --> 00:00:14,163
each of them.

6
00:00:15,660 --> 00:00:19,260
And to start, let's get back the Jonas object

7
00:00:19,260 --> 00:00:20,463
from before,

8
00:00:24,400 --> 00:00:26,913
and I will also add a first name property.

9
00:00:32,240 --> 00:00:36,750
All right, and now let's add a second method here,

10
00:00:36,750 --> 00:00:39,490
but this time using an arrow function.

11
00:00:39,490 --> 00:00:43,320
So we will do a very simple greet method.

12
00:00:43,320 --> 00:00:45,980
And so an arrow function here,

13
00:00:45,980 --> 00:00:47,900
which simply logs to the console

14
00:00:49,240 --> 00:00:52,700
Hey, and then the name.

15
00:00:52,700 --> 00:00:57,370
And so we're gonna take this name from the object.

16
00:00:57,370 --> 00:01:00,890
So this dot first name,

17
00:01:00,890 --> 00:01:03,633
or at least, that's what we think we're doing.

18
00:01:05,410 --> 00:01:08,180
So let me now show you what happens,

19
00:01:08,180 --> 00:01:12,700
as I call jonas.greet.

20
00:01:12,700 --> 00:01:16,610
And maybe you can also anticipate it based on the knowledge

21
00:01:16,610 --> 00:01:19,440
that you already have off the this keywords

22
00:01:19,440 --> 00:01:21,780
when used in an arrow function.

23
00:01:21,780 --> 00:01:24,460
So let's see what the result is here.

24
00:01:24,460 --> 00:01:27,800
And we get, Hey undefined.

25
00:01:27,800 --> 00:01:32,450
So that's not Hey Jonas, as we might have expected.

26
00:01:32,450 --> 00:01:35,560
And the reason is exactly the one that I mentioned

27
00:01:35,560 --> 00:01:36,810
in the last lecture,

28
00:01:36,810 --> 00:01:39,510
which is the fact that an arrow function

29
00:01:39,510 --> 00:01:42,340
does not get its own this keyword,

30
00:01:42,340 --> 00:01:46,060
it will simply use the this keyword from its surroundings.

31
00:01:46,060 --> 00:01:49,760
So in other words, its parents this keyword,

32
00:01:49,760 --> 00:01:53,130
and the parent scope of this greet method

33
00:01:53,130 --> 00:01:56,203
is the global scope. Okay?

34
00:01:57,140 --> 00:02:02,140
Just note here that this is actually not a code block.

35
00:02:02,280 --> 00:02:06,470
So you might think that, like this kind of block here,

36
00:02:06,470 --> 00:02:10,360
ought to create its own scope, but it doesn't.

37
00:02:10,360 --> 00:02:14,080
So this is not a code block. It is an object literal.

38
00:02:14,080 --> 00:02:19,070
So it's just a way that we literally define objects. Okay?

39
00:02:19,070 --> 00:02:23,090
So all of this here is in the global scope still.

40
00:02:23,090 --> 00:02:26,690
And so therefore, that includes this greet method.

41
00:02:26,690 --> 00:02:28,200
It is in the global scope,

42
00:02:28,200 --> 00:02:31,430
and so therefore, the arrow function here,

43
00:02:31,430 --> 00:02:34,180
which does not have its own this keyword,

44
00:02:34,180 --> 00:02:37,490
will use the this keyword from the global scope.

45
00:02:37,490 --> 00:02:41,407
And remember that is the window object. Right?

46
00:02:43,440 --> 00:02:48,440
And so this dot first name is also undefined.

47
00:02:49,430 --> 00:02:52,570
And I think that this is actually something

48
00:02:52,570 --> 00:02:54,390
that we haven't seen before.

49
00:02:54,390 --> 00:02:57,790
So when we try to access a property that doesn't exist

50
00:02:57,790 --> 00:03:01,290
on a certain object, we do not get an error,

51
00:03:01,290 --> 00:03:03,120
but simply undefined.

52
00:03:03,120 --> 00:03:05,190
And so that is what is happening here.

53
00:03:05,190 --> 00:03:07,020
That's why we get undefined,

54
00:03:07,020 --> 00:03:09,783
because this is the window object,

55
00:03:10,700 --> 00:03:14,800
so just as we saw before, and then on the window object,

56
00:03:14,800 --> 00:03:18,503
there is no first name, and so we get undefined. Okay?

57
00:03:21,190 --> 00:03:24,600
And actually, this behavior can become pretty dangerous,

58
00:03:24,600 --> 00:03:28,030
in case we use var, to declare variables.

59
00:03:28,030 --> 00:03:30,880
Because remember from a previous lecture,

60
00:03:30,880 --> 00:03:35,290
that variables declared with var, actually create properties

61
00:03:35,290 --> 00:03:37,030
on the global object.

62
00:03:37,030 --> 00:03:39,323
And so let's imagine we have this.

63
00:03:40,760 --> 00:03:45,633
So var first name equals Matilda.

64
00:03:47,980 --> 00:03:51,560
And so now as we run the greet function,

65
00:03:51,560 --> 00:03:55,310
it will say, Hey Matilda, okay?

66
00:03:55,310 --> 00:03:57,240
So why is that?

67
00:03:57,240 --> 00:04:01,180
So again, it is because inside of this function here,

68
00:04:01,180 --> 00:04:03,830
the this keyword is window.

69
00:04:03,830 --> 00:04:07,483
And actually, let me print that here to the console as well,

70
00:04:08,710 --> 00:04:12,633
just so we can really see that here happening. Okay.

71
00:04:15,495 --> 00:04:19,578
So again, window is this keyword inside

72
00:04:19,578 --> 00:04:24,350
of this arrow function, even though that arrow function

73
00:04:24,350 --> 00:04:27,470
was called by the Jonas object.

74
00:04:27,470 --> 00:04:29,810
But that rule does not apply here,

75
00:04:29,810 --> 00:04:32,910
because again, it's an arrow function.

76
00:04:32,910 --> 00:04:36,930
And so if we take a look at this window object now,

77
00:04:36,930 --> 00:04:41,560
and here, close to F, for first name,

78
00:04:41,560 --> 00:04:44,860
you see here, that it does indeed have a property

79
00:04:44,860 --> 00:04:48,240
called first name with the value of Matilda.

80
00:04:48,240 --> 00:04:52,490
And again, that's because if we declare variables with var,

81
00:04:52,490 --> 00:04:56,530
that creates these kind of properties on the global object.

82
00:04:56,530 --> 00:04:59,190
And so therefore, this dot first name,

83
00:04:59,190 --> 00:05:04,190
which translates to window dot first name is then Matilda.

84
00:05:04,630 --> 00:05:08,180
And so that's why we then get Hey Matilda here.

85
00:05:08,180 --> 00:05:12,830
So that's yet another reason not to use var.

86
00:05:12,830 --> 00:05:17,310
So you see there's a pretty long list against var.

87
00:05:17,310 --> 00:05:19,570
So from this example, the big takeaway

88
00:05:19,570 --> 00:05:22,070
is that as a best practice,

89
00:05:22,070 --> 00:05:26,920
you should never ever use an arrow function as a method.

90
00:05:26,920 --> 00:05:30,690
And in my opinion, that's even true if you're not even using

91
00:05:30,690 --> 00:05:33,740
the this keyword in a particular method.

92
00:05:33,740 --> 00:05:36,720
Because if you have this rule of never using an arrow

93
00:05:36,720 --> 00:05:40,460
function as a method, then you never have to think about

94
00:05:40,460 --> 00:05:42,820
which type of function you should use.

95
00:05:42,820 --> 00:05:46,040
You will always just use a normal function expression,

96
00:05:46,040 --> 00:05:49,590
and like this, you will then prevent this kind of mistakes

97
00:05:49,590 --> 00:05:51,210
from happen.

98
00:05:51,210 --> 00:05:54,270
So this mistake that we saw here with Hey Matilda

99
00:05:54,270 --> 00:05:57,563
is easy to prevent by simply not using var.

100
00:05:58,610 --> 00:06:02,200
But even then, Hey undefined is still a buck.

101
00:06:02,200 --> 00:06:03,760
It's still not correct.

102
00:06:03,760 --> 00:06:05,960
And so that would have easily been avoided

103
00:06:05,960 --> 00:06:10,960
by just using a regular function. Right?

104
00:06:11,040 --> 00:06:16,040
If we had this, then of course now this object Jonas,

105
00:06:16,580 --> 00:06:18,240
which is calling the function

106
00:06:18,240 --> 00:06:22,630
would then be the this keyword. Right?

107
00:06:22,630 --> 00:06:25,840
So you see first name Jonas, and then Hey Jonas.

108
00:06:25,840 --> 00:06:28,980
Because now this method actually does get its own

109
00:06:28,980 --> 00:06:29,813
this keyword.

110
00:06:30,700 --> 00:06:31,883
But let's put it back.

111
00:06:33,870 --> 00:06:37,870
And, Okay. Great.

112
00:06:37,870 --> 00:06:42,510
And now, one final example of a pitfall of this keyword

113
00:06:42,510 --> 00:06:46,210
is when we have a function inside of a method.

114
00:06:46,210 --> 00:06:49,300
And that is a pretty common thing to happen.

115
00:06:49,300 --> 00:06:53,930
And so let's now take a look at an example of that.

116
00:06:53,930 --> 00:06:56,793
So let's create another Jonas object here.

117
00:06:57,840 --> 00:06:59,570
Or, actually don't.

118
00:06:59,570 --> 00:07:02,670
Actually let's just use this object here

119
00:07:02,670 --> 00:07:04,100
that we already have.

120
00:07:04,100 --> 00:07:07,730
And let's enhance this calcAge method.

121
00:07:07,730 --> 00:07:10,890
So what I want in here is a function

122
00:07:10,890 --> 00:07:15,360
that will basically return if the person is a millennial.

123
00:07:15,360 --> 00:07:17,730
So easy enough,

124
00:07:17,730 --> 00:07:22,653
let's create an isMillennial function in here.

125
00:07:28,190 --> 00:07:31,890
And let's simply log to the console,

126
00:07:31,890 --> 00:07:36,890
if this dot year is greater equal 1981,

127
00:07:38,800 --> 00:07:41,180
and so that's the same rule that we used before,

128
00:07:41,180 --> 00:07:46,133
so that the birth year needs to stay between 1981 and 1996.

129
00:07:48,920 --> 00:07:52,240
So below 1996.

130
00:07:52,240 --> 00:07:56,430
And then let's also call that function right here.

131
00:07:56,430 --> 00:07:59,780
So isMillennial will be called

132
00:07:59,780 --> 00:08:01,713
as we called the calcAge function.

133
00:08:02,660 --> 00:08:05,150
So let's also do that.

134
00:08:05,150 --> 00:08:07,440
So Jonas dot calcAge

135
00:08:09,180 --> 00:08:12,450
So we're calling this method here, the calcAge method,

136
00:08:12,450 --> 00:08:16,730
which is a regular method, so not an arrow function.

137
00:08:16,730 --> 00:08:19,540
And so therefore, the this keyword right here

138
00:08:19,540 --> 00:08:21,620
should be the Jonas object.

139
00:08:21,620 --> 00:08:26,350
But then in here, we have a regular function, so this one,

140
00:08:26,350 --> 00:08:29,580
and here we are then calling it again.

141
00:08:29,580 --> 00:08:33,310
Now inside of this function, we are using the this keyword.

142
00:08:33,310 --> 00:08:36,773
And so let's now see what happens as we reload the page.

143
00:08:38,210 --> 00:08:42,780
And we get cannot read property year of undefined

144
00:08:42,780 --> 00:08:45,350
on line 138.

145
00:08:45,350 --> 00:08:47,400
So that's right here.

146
00:08:47,400 --> 00:08:50,520
So what this means is that the this keyword

147
00:08:50,520 --> 00:08:52,130
must be undefined.

148
00:08:52,130 --> 00:08:54,000
That's what it says here.

149
00:08:54,000 --> 00:08:56,033
So let's just log that as well,

150
00:08:57,500 --> 00:09:02,500
and here, we can get rid of this one now, okay.

151
00:09:02,560 --> 00:09:06,580
And indeed, the this key word here is undefined.

152
00:09:06,580 --> 00:09:08,620
So why is that?

153
00:09:08,620 --> 00:09:11,860
Well, if we think about this, then this here

154
00:09:11,860 --> 00:09:15,410
is really just a regular function call, isn't it?

155
00:09:15,410 --> 00:09:17,310
It is a regular function call,

156
00:09:17,310 --> 00:09:20,960
even though it happens inside of a method.

157
00:09:20,960 --> 00:09:24,620
And the rule says that inside a regular function call,

158
00:09:24,620 --> 00:09:29,260
which this clearly is, that this keyword must be undefined.

159
00:09:29,260 --> 00:09:33,120
And so therefore it is undefined right here.

160
00:09:33,120 --> 00:09:37,300
So this is just as if this function was outside

161
00:09:37,300 --> 00:09:38,550
of this method.

162
00:09:38,550 --> 00:09:40,630
So if we copy this function out here,

163
00:09:40,630 --> 00:09:43,013
we would get the exact same result.

164
00:09:43,870 --> 00:09:48,450
Now some people consider that this is a bug in JavaScript

165
00:09:48,450 --> 00:09:51,060
but in my opinion, it's not really.

166
00:09:51,060 --> 00:09:53,700
It's just how the this keyword works.

167
00:09:53,700 --> 00:09:57,200
It's a clear rule that a regular function call

168
00:09:57,200 --> 00:09:59,860
has the this keyword set to undefined.

169
00:09:59,860 --> 00:10:02,820
And so that's just what is happening here.

170
00:10:02,820 --> 00:10:06,350
Now there are two solutions to this problem.

171
00:10:06,350 --> 00:10:09,513
The first solution is to use an extra variable

172
00:10:09,513 --> 00:10:12,143
that we usually call self.

173
00:10:13,300 --> 00:10:17,510
So outside of the function, let's say self

174
00:10:17,510 --> 00:10:20,710
and then we set that to this.

175
00:10:20,710 --> 00:10:23,200
Because here we are still outside

176
00:10:23,200 --> 00:10:25,960
of this isMillennial function.

177
00:10:25,960 --> 00:10:29,210
And so here, we still have access to this keyword

178
00:10:29,210 --> 00:10:31,630
set to Jonas. Right?

179
00:10:31,630 --> 00:10:35,473
And so then in here, we can use simply self.

180
00:10:37,800 --> 00:10:39,520
And let's do that just here.

181
00:10:39,520 --> 00:10:42,320
And here I will duplicate this line

182
00:10:44,410 --> 00:10:47,203
so that we can keep the original one.

183
00:10:49,680 --> 00:10:51,930
And so now let's use self here.

184
00:10:51,930 --> 00:10:54,430
And so then through the scope chain,

185
00:10:54,430 --> 00:10:57,920
this self will be equal to this.

186
00:10:57,920 --> 00:11:00,200
So self is referenced here,

187
00:11:00,200 --> 00:11:02,580
but it's not of course in the scope.

188
00:11:02,580 --> 00:11:05,130
And so JavaScript goes up the scope chain,

189
00:11:05,130 --> 00:11:08,240
into the parent scope, which is calcAge.

190
00:11:08,240 --> 00:11:13,240
So here is where self is defined, and it is defined as this.

191
00:11:13,673 --> 00:11:14,837
So as to this keyword.

192
00:11:14,837 --> 00:11:17,810
And so this is a way in which we can preserve

193
00:11:17,810 --> 00:11:18,793
the this keyword.

194
00:11:19,930 --> 00:11:24,930
This can also be called debt, so that you might also see.

195
00:11:25,920 --> 00:11:29,590
And so as we reload, now, this actually works.

196
00:11:29,590 --> 00:11:32,430
So now we get the value of true.

197
00:11:32,430 --> 00:11:36,170
So this was kind of the pre ES6 solution,

198
00:11:36,170 --> 00:11:38,970
but you might still find this solution

199
00:11:38,970 --> 00:11:40,940
in some older code bases.

200
00:11:40,940 --> 00:11:44,950
However, now in ES6 we have a more modern

201
00:11:44,950 --> 00:11:46,490
and better solution.

202
00:11:46,490 --> 00:11:50,693
And that solution is to use an arrow function. Alright.

203
00:11:52,780 --> 00:11:55,563
So let's actually copy all of this,

204
00:11:56,500 --> 00:11:59,993
because I want to preserve both versions here.

205
00:12:01,860 --> 00:12:04,233
And now I will just comment out this first.

206
00:12:05,700 --> 00:12:07,113
Let's say solution one,

207
00:12:09,500 --> 00:12:11,310
but now here we have solution two,

208
00:12:11,310 --> 00:12:15,083
which does not need this extra variable.

209
00:12:17,980 --> 00:12:21,020
Okay, so let's get rid of this

210
00:12:22,040 --> 00:12:26,010
bring this back and here this again.

211
00:12:26,010 --> 00:12:28,830
And now, again, the solution to the problem

212
00:12:28,830 --> 00:12:32,890
that we saw before is that we can now use an arrow function.

213
00:12:32,890 --> 00:12:35,940
And that is going to work because the arrow function

214
00:12:35,940 --> 00:12:40,940
does not have its own this keyword. Right?

215
00:12:40,940 --> 00:12:44,440
So let's remember again, that when we just call this,

216
00:12:44,440 --> 00:12:47,890
we get that to this keyword is undefined.

217
00:12:47,890 --> 00:12:50,020
And that's because a regular function

218
00:12:50,020 --> 00:12:52,260
gets its own this keyword.

219
00:12:52,260 --> 00:12:54,340
But the arrow function will not,

220
00:12:54,340 --> 00:12:57,810
it will simply use this keyword of its parent scope.

221
00:12:57,810 --> 00:13:01,990
And in this case, that will be the calcAge method,

222
00:13:01,990 --> 00:13:06,510
and in here the this keyword is Jonas, so the Jonas object.

223
00:13:06,510 --> 00:13:09,600
And therefore then here in an arrow function,

224
00:13:09,600 --> 00:13:11,453
that would also be the this keyword.

225
00:13:12,810 --> 00:13:15,433
And then it is gonna work as expected,

226
00:13:16,470 --> 00:13:18,650
and indeed, now it is true.

227
00:13:18,650 --> 00:13:21,470
And again, this worked because this arrow function

228
00:13:21,470 --> 00:13:25,030
uses the this keyword from its parent scope.

229
00:13:25,030 --> 00:13:27,260
And in this case, in the parent scope,

230
00:13:27,260 --> 00:13:29,730
the this keyword is Jonas.

231
00:13:29,730 --> 00:13:33,750
So basically an arrow function inherits the this keyword

232
00:13:33,750 --> 00:13:35,710
from the parent scope.

233
00:13:35,710 --> 00:13:39,780
And that is exactly what we need here. All right.

234
00:13:39,780 --> 00:13:42,650
And so here, you see that it's pretty important

235
00:13:42,650 --> 00:13:46,810
to know exactly how each of the different type of functions

236
00:13:46,810 --> 00:13:49,750
work in regards to the this keyword.

237
00:13:49,750 --> 00:13:52,720
Because then you can really use them according

238
00:13:52,720 --> 00:13:55,340
to your specific needs.

239
00:13:55,340 --> 00:13:58,760
Great. So I hope that especially this solution here

240
00:13:58,760 --> 00:14:00,420
made sense to you.

241
00:14:00,420 --> 00:14:03,730
And that when you need it at some point in your journey,

242
00:14:03,730 --> 00:14:08,060
or in your job, you can remember that this is a very useful

243
00:14:08,060 --> 00:14:10,363
use case of the arrow function.

244
00:14:11,530 --> 00:14:13,560
Now, just to finish this lecture,

245
00:14:13,560 --> 00:14:17,980
I also want to quickly touch on the arguments keywords.

246
00:14:17,980 --> 00:14:21,310
Maybe you remember me talking about that,

247
00:14:21,310 --> 00:14:23,630
also in a previous lecture.

248
00:14:23,630 --> 00:14:26,500
So in the video about execution context,

249
00:14:26,500 --> 00:14:27,870
and the call stack,

250
00:14:27,870 --> 00:14:30,850
we learned that functions also get access

251
00:14:30,850 --> 00:14:33,010
to an arguments keyword.

252
00:14:33,010 --> 00:14:37,300
So not just the this keyword, but also an arguments keyword.

253
00:14:37,300 --> 00:14:41,420
Now, just like the this keyword, the arguments keyword

254
00:14:41,420 --> 00:14:44,720
is only available in regular functions.

255
00:14:44,720 --> 00:14:49,103
So let's create another function here.

256
00:14:50,200 --> 00:14:51,713
So first an expression.

257
00:14:52,760 --> 00:14:55,610
So again, basically that's our functions for adding

258
00:14:55,610 --> 00:14:58,363
and actually let me just grab them from here.

259
00:14:59,460 --> 00:15:02,023
I think I defined them somewhere up here.

260
00:15:03,280 --> 00:15:04,113
Yes.

261
00:15:04,990 --> 00:15:06,460
So there's no need to rewrite

262
00:15:07,690 --> 00:15:09,483
the same code over and over again.

263
00:15:10,650 --> 00:15:12,223
Just add a comment here,

264
00:15:13,220 --> 00:15:15,633
arguments keyword.

265
00:15:18,170 --> 00:15:23,170
And then let me also print to the console, that keyword.

266
00:15:25,470 --> 00:15:27,923
So let me quickly call this function here now.

267
00:15:29,080 --> 00:15:31,930
So two and five

268
00:15:31,930 --> 00:15:35,180
so just so we see the arguments keyword.

269
00:15:35,180 --> 00:15:36,810
And so down here it is

270
00:15:36,810 --> 00:15:40,370
and you see that we get basically an array

271
00:15:40,370 --> 00:15:42,800
with two and five.

272
00:15:42,800 --> 00:15:47,120
And so that's exactly the two parameters that we passed in.

273
00:15:47,120 --> 00:15:49,690
And this can be useful when we need a function

274
00:15:49,690 --> 00:15:53,443
to accept more parameters than we actually specified.

275
00:15:54,740 --> 00:15:57,053
So this is something that we never did before.

276
00:15:59,720 --> 00:16:02,660
So up until this point, we have only ever specified

277
00:16:02,660 --> 00:16:07,080
exactly the arguments that we have here in the list

278
00:16:07,080 --> 00:16:08,480
of parameters.

279
00:16:08,480 --> 00:16:11,670
So we have two parameters, and so two arguments.

280
00:16:11,670 --> 00:16:16,280
But it is completely legal to add more arguments.

281
00:16:16,280 --> 00:16:19,120
They will not have a name, so we didn't name them,

282
00:16:19,120 --> 00:16:20,280
but they exist.

283
00:16:20,280 --> 00:16:25,280
And we can see them here in the arguments array. All right.

284
00:16:25,850 --> 00:16:28,310
So they do appear here, and we can use them

285
00:16:28,310 --> 00:16:30,330
therefore in the functions.

286
00:16:30,330 --> 00:16:32,290
For example, we could use a loop,

287
00:16:32,290 --> 00:16:34,670
and then loop over this array

288
00:16:34,670 --> 00:16:37,450
and add all the numbers together.

289
00:16:37,450 --> 00:16:40,740
But now my point here is that the arrow function

290
00:16:40,740 --> 00:16:43,030
does not get this keyword.

291
00:16:43,030 --> 00:16:45,360
So that's also log it to the console here

292
00:16:45,360 --> 00:16:50,350
so let's put this here in curly braces,

293
00:16:50,350 --> 00:16:53,410
then remember when we have more than one line of code,

294
00:16:53,410 --> 00:16:55,363
we need to explicitly return.

295
00:16:58,030 --> 00:17:02,950
And so let's try to take a look at the arguments keyword

296
00:17:02,950 --> 00:17:04,690
here as well.

297
00:17:04,690 --> 00:17:09,690
So add arrow two, five, eight, let's say,

298
00:17:09,950 --> 00:17:11,870
but then we get an error.

299
00:17:11,870 --> 00:17:15,820
So arguments is not defined. All right.

300
00:17:15,820 --> 00:17:18,090
So this was simply just to show you

301
00:17:18,090 --> 00:17:20,930
that the arguments keyword exists,

302
00:17:20,930 --> 00:17:24,220
but that it only exists in regular functions.

303
00:17:24,220 --> 00:17:26,570
So in function expressions like this,

304
00:17:26,570 --> 00:17:28,690
but also in function declarations,

305
00:17:28,690 --> 00:17:30,663
but not in an arrow function.

306
00:17:31,500 --> 00:17:35,020
But anyway, the arguments keyword is not that important

307
00:17:35,020 --> 00:17:37,210
in modern JavaScript anymore,

308
00:17:37,210 --> 00:17:40,000
because now we have a more modern way

309
00:17:40,000 --> 00:17:42,500
of dealing with multiple parameters.

310
00:17:42,500 --> 00:17:45,130
But still it's important that you are aware

311
00:17:45,130 --> 00:17:49,250
that this arguments keywords exists.

312
00:17:49,250 --> 00:17:52,280
All right, and now with all these lectures

313
00:17:52,280 --> 00:17:55,460
on regular functions and arrow functions,

314
00:17:55,460 --> 00:17:58,150
you should know all the differences between them,

315
00:17:58,150 --> 00:18:01,683
and even more importantly, when to use each of them.

