All language subtitles for 4. Function Declarations vs. Expressions

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:01,390 --> 00:00:04,830 Welcome back, so I hope that you studied 2 2 00:00:04,830 --> 00:00:07,120 the last lecture really well, 3 3 00:00:07,120 --> 00:00:10,060 so that you really understood what we did there 4 4 00:00:10,060 --> 00:00:12,690 with our food processor function. 5 5 00:00:12,690 --> 00:00:15,070 Now in JavaScript, there are different ways 6 6 00:00:15,070 --> 00:00:16,680 of writing functions. 7 7 00:00:16,680 --> 00:00:18,110 And each type of function, 8 8 00:00:18,110 --> 00:00:20,590 works in a slightly different way. 9 9 00:00:20,590 --> 00:00:24,070 But don't worry, they're still all very similar. 10 10 00:00:24,070 --> 00:00:25,583 So let's find out now. 11 11 00:00:27,050 --> 00:00:30,270 So the functions that I showed you in the last lecture 12 12 00:00:30,270 --> 00:00:32,800 are called function declarations 13 13 00:00:32,800 --> 00:00:35,560 because we simply use the function keyword 14 14 00:00:35,560 --> 00:00:40,560 to declare a function a bit like we declare a variable. 15 15 00:00:40,590 --> 00:00:43,940 So let's now write another function declaration. 16 16 00:00:43,940 --> 00:00:47,290 And this time a function to calculate an age 17 17 00:00:47,290 --> 00:00:49,083 based on a given birth year. 18 18 00:00:50,850 --> 00:00:54,290 So let's again use the function keyword 19 19 00:00:54,290 --> 00:00:55,990 and we're gonna call this calcAge1 20 20 00:00:58,950 --> 00:01:02,030 and that's because we're gonna have another one later. 21 21 00:01:02,030 --> 00:01:05,290 So as I said, we want a person's birth year 22 22 00:01:05,290 --> 00:01:07,410 as an input to this function. 23 23 00:01:07,410 --> 00:01:09,750 And what is an input? 24 24 00:01:09,750 --> 00:01:13,530 Well, it's just a parameter in this function. 25 25 00:01:13,530 --> 00:01:17,600 line:15% And the parameter remember it's a bit like a local variable, 26 26 00:01:17,600 --> 00:01:20,240 line:15% that's only available inside of this function 27 27 00:01:22,160 --> 00:01:25,060 Then the function body with the curly braces 28 28 00:01:25,060 --> 00:01:28,930 and now the code that we want to create here. 29 29 00:01:28,930 --> 00:01:31,810 So, how do we calculate an age? 30 30 00:01:31,810 --> 00:01:35,230 Well, just like we did before 31 31 00:01:35,230 --> 00:01:36,780 we take the current year, 32 32 00:01:36,780 --> 00:01:40,670 which once more let's suppose it's 2037 33 33 00:01:40,670 --> 00:01:43,053 and then minus the person's birth year. 34 34 00:01:44,710 --> 00:01:47,320 And then remember to take this value now 35 35 00:01:47,320 --> 00:01:52,320 out of the function, we return it using the return keyword. 36 36 00:01:52,960 --> 00:01:57,210 So we calculate the age first and then we return that value. 37 37 00:01:57,210 --> 00:01:59,150 And actually we can simplify this 38 38 00:01:59,150 --> 00:02:02,290 and basically return all in one go. 39 39 00:02:02,290 --> 00:02:07,070 So there's actually no need to store this value here 40 40 00:02:07,070 --> 00:02:11,243 in a variable, if all we do is then later return that value. 41 41 00:02:12,190 --> 00:02:15,360 So in fact, we can just take this value here, 42 42 00:02:15,360 --> 00:02:19,770 get rid of this and then simply return the result 43 43 00:02:19,770 --> 00:02:22,040 of this expression here, 44 44 00:02:22,040 --> 00:02:26,330 so basically of this operation, okay? 45 45 00:02:26,330 --> 00:02:28,800 So we're taking the birth year that we're gonna receive 46 46 00:02:28,800 --> 00:02:31,900 and then use that to calculate the age. 47 47 00:02:31,900 --> 00:02:35,940 And so once again, this is a generic function, 48 48 00:02:35,940 --> 00:02:40,700 which is then gonna work for any birth year that we give it. 49 49 00:02:40,700 --> 00:02:44,040 So of course, let's now call or invoke 50 50 00:02:44,040 --> 00:02:46,160 or execute this function. 51 51 00:02:46,160 --> 00:02:47,240 And again, I can use 52 52 00:02:47,240 --> 00:02:50,390 all of these three words interchangeably, 53 53 00:02:50,390 --> 00:02:52,650 they all mean the same thing. 54 54 00:02:52,650 --> 00:02:57,310 So calcAgel and then remember to call the function 55 55 00:02:57,310 --> 00:03:00,450 we use parenthesis and then we specify 56 56 00:03:00,450 --> 00:03:03,130 the actual value of the parameter 57 57 00:03:03,130 --> 00:03:06,060 which is called the argument, remember? 58 58 00:03:06,060 --> 00:03:08,330 So let's say 1991. 59 59 00:03:08,330 --> 00:03:10,690 Now some people use the words arguments 60 60 00:03:10,690 --> 00:03:13,850 and parameters as if they were the same 61 61 00:03:13,850 --> 00:03:16,030 and actually that's not a big deal 62 62 00:03:16,030 --> 00:03:20,280 but to be really precise, the parameter is again 63 63 00:03:20,280 --> 00:03:23,280 the kind of placeholder in the function 64 64 00:03:23,280 --> 00:03:26,230 and the argument is then the actual value 65 65 00:03:26,230 --> 00:03:29,360 that we use to fill in that placeholder 66 66 00:03:29,360 --> 00:03:31,440 that is the parameter. 67 67 00:03:31,440 --> 00:03:36,370 Anyway, this will now create a value, right? 68 68 00:03:36,370 --> 00:03:39,280 And the value that this will create is the value 69 69 00:03:39,280 --> 00:03:42,410 that's returned from the calcAge function 70 70 00:03:42,410 --> 00:03:44,990 so basically this returned value. 71 71 00:03:44,990 --> 00:03:47,860 And so, once again, we need to capture 72 72 00:03:47,860 --> 00:03:51,860 or to save that value into a variable. 73 73 00:03:51,860 --> 00:03:53,010 So let's call this age1 74 74 00:03:55,400 --> 00:03:57,610 and just to make sure that it works, 75 75 00:03:57,610 --> 00:04:00,923 let's quickly check it out in the console. 76 76 00:04:04,060 --> 00:04:04,893 Okay. 77 77 00:04:06,340 --> 00:04:10,323 And indeed, we get 46 just like we did before, okay? 78 78 00:04:12,810 --> 00:04:15,690 So that is a function declaration 79 79 00:04:15,690 --> 00:04:19,060 but now let's create a function expression. 80 80 00:04:19,060 --> 00:04:22,080 So that's the other type of function that exists 81 81 00:04:22,080 --> 00:04:23,773 and it looks like this. 82 82 00:04:25,040 --> 00:04:29,320 Instead of writing a function with the calcAge name, 83 83 00:04:29,320 --> 00:04:32,300 we simply write function basically without a name 84 84 00:04:33,360 --> 00:04:38,020 and then we still define the parameter, 85 85 00:04:38,020 --> 00:04:40,260 we still define the function body, 86 86 00:04:40,260 --> 00:04:43,340 which is gonna be the same as this one 87 87 00:04:43,340 --> 00:04:45,893 because we want another calcAge function here. 88 88 00:04:46,990 --> 00:04:48,930 So we write a function like this 89 89 00:04:48,930 --> 00:04:50,760 and then what we have to do 90 90 00:04:50,760 --> 00:04:54,480 is to store all of this here into a variable 91 91 00:04:55,520 --> 00:04:58,253 and that variable will then be the function. 92 92 00:04:59,520 --> 00:05:01,287 So let's call it, calcAge2. 93 93 00:05:03,110 --> 00:05:07,990 So again, we did write the function in a very similar way, 94 94 00:05:07,990 --> 00:05:10,220 but we didn't give it a name here, 95 95 00:05:10,220 --> 00:05:13,070 so it's a function without a name basically, 96 96 00:05:13,070 --> 00:05:16,330 which is also called an anonymous function. 97 97 00:05:16,330 --> 00:05:19,090 So all of this here is basically an expression 98 98 00:05:19,090 --> 00:05:22,110 and remember that an expression produces a value. 99 99 00:05:22,110 --> 00:05:26,390 And so we use that value in store it into calcAge2 100 100 00:05:26,390 --> 00:05:28,890 and this will then be the function. 101 101 00:05:28,890 --> 00:05:31,280 And I know that sounds very confusing 102 102 00:05:31,280 --> 00:05:33,133 but it will make sense, trust me. 103 103 00:05:34,000 --> 00:05:35,670 Now to call this function, 104 104 00:05:35,670 --> 00:05:38,423 we actually do it in the exact same way. 105 105 00:05:39,510 --> 00:05:44,510 So let's do age2 equals calcAge2 106 106 00:05:46,710 --> 00:05:48,770 and let's use 1991 again 107 107 00:05:49,790 --> 00:05:54,230 and then let's grab this console.log here 108 108 00:05:54,230 --> 00:05:58,383 and log both the ages, So age2 here, 109 109 00:05:59,650 --> 00:06:01,653 let's also add some comments here, 110 110 00:06:03,350 --> 00:06:08,350 function declaration and function expression. 111 111 00:06:13,200 --> 00:06:15,730 And so we should get twice 112 112 00:06:15,730 --> 00:06:19,800 the 46 value here and yes, indeed. 113 113 00:06:19,800 --> 00:06:22,320 So the functional expression works 114 114 00:06:22,320 --> 00:06:25,120 the exact same way as the function declaration. 115 115 00:06:25,120 --> 00:06:27,500 So we call it in the same way we capture 116 116 00:06:27,500 --> 00:06:29,700 the return value in the same way 117 117 00:06:29,700 --> 00:06:32,890 and then of course the result is also the same 118 118 00:06:32,890 --> 00:06:36,020 because the function body is the same. 119 119 00:06:36,020 --> 00:06:37,480 But it's very important to know 120 120 00:06:37,480 --> 00:06:41,020 that we have these two type of functions in JavaScript. 121 121 00:06:41,020 --> 00:06:43,580 Because in some places we will actually need 122 122 00:06:43,580 --> 00:06:45,540 to write them like this, 123 123 00:06:45,540 --> 00:06:48,740 as you will see as we go through the course. 124 124 00:06:48,740 --> 00:06:51,610 So again, this part here that I just highlighted 125 125 00:06:51,610 --> 00:06:54,970 this function here is in fact an expression 126 126 00:06:54,970 --> 00:06:58,440 and remember that expressions produce values. 127 127 00:06:58,440 --> 00:07:01,200 And so we just assign this whole value here 128 128 00:07:01,200 --> 00:07:04,100 then to this variable. 129 129 00:07:04,100 --> 00:07:06,480 And so this variable will then hold 130 130 00:07:06,480 --> 00:07:09,020 this function value basically. 131 131 00:07:09,020 --> 00:07:12,320 And one big implication of what I just said, 132 132 00:07:12,320 --> 00:07:15,310 So, that this here is just a value, yeah, 133 133 00:07:15,310 --> 00:07:17,420 is that in fact in JavaScript, 134 134 00:07:17,420 --> 00:07:20,050 functions are actually just values. 135 135 00:07:20,050 --> 00:07:24,290 So just as a number or a string or a boolean value. 136 136 00:07:24,290 --> 00:07:26,190 So a function is not a type, okay? 137 137 00:07:26,190 --> 00:07:28,800 It's not like a string or number type 138 138 00:07:28,800 --> 00:07:31,090 but it's also a value. 139 139 00:07:31,090 --> 00:07:34,670 And so if it's a value, we can store it in a variable. 140 140 00:07:34,670 --> 00:07:36,160 So just keep this in mind 141 141 00:07:36,160 --> 00:07:38,870 because it will become very important later 142 142 00:07:38,870 --> 00:07:42,400 when we really dig deep into functions. 143 143 00:07:42,400 --> 00:07:45,350 Now, besides these technical differences, 144 144 00:07:45,350 --> 00:07:48,100 you might be wondering what is the big deal? 145 145 00:07:48,100 --> 00:07:49,860 So what's the big difference between 146 146 00:07:49,860 --> 00:07:53,480 function declarations and function expressions? 147 147 00:07:53,480 --> 00:07:55,640 Well, the main practical difference 148 148 00:07:55,640 --> 00:07:58,600 is that we can actually call function declarations 149 149 00:07:58,600 --> 00:08:01,660 before they are defined in the code. 150 150 00:08:01,660 --> 00:08:05,130 So let me show that to you. 151 151 00:08:05,130 --> 00:08:07,720 So here is the declaration, right? 152 152 00:08:07,720 --> 00:08:10,700 This is the function declaration and as I just said, 153 153 00:08:10,700 --> 00:08:15,700 we can call them in a code before they are defined. 154 154 00:08:16,780 --> 00:08:21,260 So now we're calling it first and then defining it later. 155 155 00:08:21,260 --> 00:08:23,260 So let me show you that that still works 156 156 00:08:24,760 --> 00:08:27,390 and indeed we still get the same result. 157 157 00:08:27,390 --> 00:08:30,353 But if we attempt to do the same with the expression, 158 158 00:08:32,460 --> 00:08:34,650 then that should not work. 159 159 00:08:34,650 --> 00:08:38,570 So let's see and yeah, 160 160 00:08:38,570 --> 00:08:42,963 so cannot access calcAge2 before initialization, okay? 161 161 00:08:44,580 --> 00:08:46,790 and internally this happens 162 162 00:08:46,790 --> 00:08:49,800 because of a process called hoisting 163 163 00:08:49,800 --> 00:08:54,520 but more about that in a future section, okay? 164 164 00:08:54,520 --> 00:08:58,620 For now just keep in mind that you can call 165 165 00:08:58,620 --> 00:09:01,670 a function declaration before you define it 166 166 00:09:01,670 --> 00:09:06,670 even though that might not be such a good idea in many cases 167 167 00:09:06,810 --> 00:09:09,850 but you can do it if necessary. 168 168 00:09:09,850 --> 00:09:11,840 All right, now another question 169 169 00:09:11,840 --> 00:09:13,580 that you might have in your mind 170 170 00:09:13,580 --> 00:09:17,030 is which of the two types of functions should I use 171 171 00:09:17,030 --> 00:09:19,860 when I write my own functions? 172 172 00:09:19,860 --> 00:09:23,420 And well, the answer is that oftentimes 173 173 00:09:23,420 --> 00:09:27,070 it's really just a matter of personal preference. 174 174 00:09:27,070 --> 00:09:30,680 and so different developers prefer different formats. 175 175 00:09:30,680 --> 00:09:34,470 Personally, I prefer to use function expressions 176 176 00:09:34,470 --> 00:09:37,980 because this then forces me into a nice structure 177 177 00:09:37,980 --> 00:09:40,630 where I have to define all the functions first 178 178 00:09:40,630 --> 00:09:44,190 at the top of the code and only then I can call them. 179 179 00:09:44,190 --> 00:09:46,590 So this makes the code a little bit nicer 180 180 00:09:46,590 --> 00:09:48,330 and more structured. 181 181 00:09:48,330 --> 00:09:52,040 I also like to have everything stored in variables, 182 182 00:09:52,040 --> 00:09:55,640 so both values and functions, but again, 183 183 00:09:55,640 --> 00:09:58,520 that is just my own personal preference. 184 184 00:09:58,520 --> 00:10:01,580 And many other developers don't agree with this 185 185 00:10:01,580 --> 00:10:04,400 and prefer to use function declarations. 186 186 00:10:04,400 --> 00:10:08,470 So, if you also prefer a function declarations, that's fine. 187 187 00:10:08,470 --> 00:10:11,030 So, just use declarations then. 188 188 00:10:11,030 --> 00:10:13,030 It's absolutely no problem. 189 189 00:10:13,030 --> 00:10:16,570 However, even if you prefer one over the other, 190 190 00:10:16,570 --> 00:10:18,840 you still need to know about both 191 191 00:10:18,840 --> 00:10:22,360 the function expressions and function declarations. 192 192 00:10:22,360 --> 00:10:24,030 So you can not just pick one 193 193 00:10:24,030 --> 00:10:26,000 and then forget the other one 194 194 00:10:26,000 --> 00:10:29,140 because both have their place in JavaScript. 195 195 00:10:29,140 --> 00:10:31,370 And so it's really important that you know 196 196 00:10:31,370 --> 00:10:33,780 how to use and how's to distinguish 197 197 00:10:33,780 --> 00:10:36,913 both function declarations and expressions. 17225

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.