All language subtitles for 3. An High-Level Overview of JavaScript

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,150 --> 00:00:04,410 As an introduction to this theory section, 2 2 00:00:04,410 --> 00:00:06,720 I want to start with a very cool 3 3 00:00:06,720 --> 00:00:11,190 and very high-level overview about the JavaScript language. 4 4 00:00:11,190 --> 00:00:13,480 Just so you get a first overview 5 5 00:00:13,480 --> 00:00:16,380 of most of the things that we need to learn 6 6 00:00:16,380 --> 00:00:19,830 in order to eventually master JavaScript. 7 7 00:00:19,830 --> 00:00:22,520 And this is gonna be a long lecture, 8 8 00:00:22,520 --> 00:00:25,303 so get ready for a crazy ride. 9 9 00:00:27,400 --> 00:00:30,860 And I want to start by coming back to that first definition 10 10 00:00:30,860 --> 00:00:33,300 that I gave you on JavaScript, 11 11 00:00:33,300 --> 00:00:35,370 where I told you that JavaScript 12 12 00:00:35,370 --> 00:00:37,890 is a high-level, object-oriented, 13 13 00:00:37,890 --> 00:00:40,980 multi-paradigm programming language. 14 14 00:00:40,980 --> 00:00:44,140 Now this is of course 100% correct, 15 15 00:00:44,140 --> 00:00:47,170 but it's also really just the surface, 16 16 00:00:47,170 --> 00:00:49,610 the tip of the iceberg. 17 17 00:00:49,610 --> 00:00:53,020 So what about this definition? 18 18 00:00:53,020 --> 00:00:55,700 JavaScript is a high-level, prototype-based, 19 19 00:00:55,700 --> 00:00:57,710 object-oriented, multi-paradigm, 20 20 00:00:57,710 --> 00:01:00,740 interpreted or just-in-time compiled, 21 21 00:01:00,740 --> 00:01:02,120 dynamic, single-threaded, 22 22 00:01:02,120 --> 00:01:04,090 garbage-collected programming language 23 23 00:01:04,090 --> 00:01:06,000 with first-class functions 24 24 00:01:06,000 --> 00:01:10,050 and a non-blocking event loop concurrency model. 25 25 00:01:10,050 --> 00:01:11,760 Wait, what? 26 26 00:01:11,760 --> 00:01:14,090 Is this some kind of joke? 27 27 00:01:14,090 --> 00:01:17,600 Well, yeah, it kind of is actually, 28 28 00:01:17,600 --> 00:01:20,280 I just packed as much information as possible 29 29 00:01:20,280 --> 00:01:25,280 about JavaScript into one unreadable sentence, just for fun, 30 30 00:01:25,970 --> 00:01:27,790 but besides fun, 31 31 00:01:27,790 --> 00:01:30,600 this also gives us a great opportunity 32 32 00:01:30,600 --> 00:01:34,960 to unpack all of this in order to get a first peek 33 33 00:01:34,960 --> 00:01:38,380 into all the stuff that we're gonna learn about JavaScript 34 34 00:01:38,380 --> 00:01:40,010 throughout the course. 35 35 00:01:40,010 --> 00:01:44,210 And this is not to intimidate you. It's really not. 36 36 00:01:44,210 --> 00:01:46,550 I just want you to get the big picture 37 37 00:01:46,550 --> 00:01:48,960 before really getting started 38 38 00:01:48,960 --> 00:01:51,170 and also introduce some topics 39 39 00:01:51,170 --> 00:01:53,420 that are just good to know, 40 40 00:01:53,420 --> 00:01:56,910 because getting the big picture before diving deep 41 41 00:01:56,910 --> 00:02:00,920 is in my opinion, an amazing learning technique. 42 42 00:02:00,920 --> 00:02:05,083 So with that being said, let's unpack this now a little bit. 43 43 00:02:06,130 --> 00:02:08,390 So these are the nine JavaScript topics 44 44 00:02:08,390 --> 00:02:11,630 that we're briefly gonna talk about in this lecture, 45 45 00:02:11,630 --> 00:02:12,933 slightly reordered. 46 46 00:02:13,820 --> 00:02:16,700 And starting with the high-level part, 47 47 00:02:16,700 --> 00:02:18,180 as you might already know, 48 48 00:02:18,180 --> 00:02:20,940 every program that runs on your computer 49 49 00:02:20,940 --> 00:02:23,530 needs some hardware resources, 50 50 00:02:23,530 --> 00:02:28,000 such as memory and the CPU to do its work. 51 51 00:02:28,000 --> 00:02:31,980 Now, there are low-level languages, such as C, 52 52 00:02:31,980 --> 00:02:35,360 where you have to manually manage these resources. 53 53 00:02:35,360 --> 00:02:36,210 For example, 54 54 00:02:36,210 --> 00:02:40,630 asking the computer for memory to create a new variable. 55 55 00:02:40,630 --> 00:02:41,810 On the other side, 56 56 00:02:41,810 --> 00:02:46,470 you have high-level languages such as JavaScript and Python, 57 57 00:02:46,470 --> 00:02:49,880 where we do not have to manage resources at all 58 58 00:02:49,880 --> 00:02:53,660 because these languages have so-called abstractions 59 59 00:02:53,660 --> 00:02:56,560 that take all of that work away from us. 60 60 00:02:56,560 --> 00:02:59,700 This makes the language easier to learn and to use, 61 61 00:02:59,700 --> 00:03:03,710 but the downside is that programs will never be as fast 62 62 00:03:03,710 --> 00:03:08,170 or as optimized as for example, C programs. 63 63 00:03:08,170 --> 00:03:10,170 Now, one of the powerful tools 64 64 00:03:10,170 --> 00:03:13,530 that takes memory management away from us developers 65 65 00:03:13,530 --> 00:03:15,690 is garbage-collection, 66 66 00:03:15,690 --> 00:03:17,700 which is basically an algorithm 67 67 00:03:17,700 --> 00:03:19,780 inside the JavaScript engine, 68 68 00:03:19,780 --> 00:03:23,370 which automatically removes old, unused objects 69 69 00:03:23,370 --> 00:03:24,970 from the computer memory 70 70 00:03:24,970 --> 00:03:29,430 in order not to clog it up with unnecessary stuff. 71 71 00:03:29,430 --> 00:03:33,490 So it's a little bit like JavaScript has a cleaning guy 72 72 00:03:33,490 --> 00:03:36,750 who cleans our memory from time to time 73 73 00:03:36,750 --> 00:03:40,350 so that we don't have to do it manually in our code. 74 74 00:03:40,350 --> 00:03:43,440 Next up, JavaScript is an interpreted 75 75 00:03:43,440 --> 00:03:46,620 or just-in-time compiled language. 76 76 00:03:46,620 --> 00:03:50,070 And again, we will learn more about this in this section, 77 77 00:03:50,070 --> 00:03:51,990 but what you need to know for now 78 78 00:03:51,990 --> 00:03:54,080 is that the computer's processor 79 79 00:03:54,080 --> 00:03:58,750 only understands zeros and ones, that's right. 80 80 00:03:58,750 --> 00:04:01,880 Ultimately, every single program needs to be written 81 81 00:04:01,880 --> 00:04:06,840 in zeros and ones, which is also called machine code. 82 82 00:04:06,840 --> 00:04:10,860 And since that's not really practical to write, is it? 83 83 00:04:10,860 --> 00:04:14,630 We simply write human-readable JavaScript code, 84 84 00:04:14,630 --> 00:04:18,020 which is an abstraction over machine code, 85 85 00:04:18,020 --> 00:04:21,020 but this code eventually needs to be translated 86 86 00:04:21,020 --> 00:04:22,590 to machine code. 87 87 00:04:22,590 --> 00:04:25,330 And that step can be either compiling 88 88 00:04:25,330 --> 00:04:27,370 or interpreting. 89 89 00:04:27,370 --> 00:04:31,220 This step is necessary in every single programming language 90 90 00:04:31,220 --> 00:04:34,700 because no one writes machine code manually. 91 91 00:04:34,700 --> 00:04:36,360 In the case of JavaScript, 92 92 00:04:36,360 --> 00:04:39,283 this happens inside the JavaScript engine. 93 93 00:04:40,500 --> 00:04:44,380 Now, one of the things that makes JavaScript so popular 94 94 00:04:44,380 --> 00:04:48,150 is the fact that it's a multi-paradigm language. 95 95 00:04:48,150 --> 00:04:51,400 In programming, a paradigm is an approach 96 96 00:04:51,400 --> 00:04:55,100 and an overall mindset of structuring our code, 97 97 00:04:55,100 --> 00:04:59,060 which will ultimately direct the coding style and technique 98 98 00:04:59,060 --> 00:05:02,920 in a project that uses a certain paradigm. 99 99 00:05:02,920 --> 00:05:06,450 And this definition still sounds kind of abstract, 100 100 00:05:06,450 --> 00:05:07,580 but don't worry, 101 101 00:05:07,580 --> 00:05:10,223 it will become more clear as we move on. 102 102 00:05:11,100 --> 00:05:13,610 Now, three popular paradigms are; 103 103 00:05:13,610 --> 00:05:16,090 procedural, object-oriented, 104 104 00:05:16,090 --> 00:05:18,440 and functional programming. 105 105 00:05:18,440 --> 00:05:22,400 So procedural programming is what we've been doing so far, 106 106 00:05:22,400 --> 00:05:25,230 which is basically just organizing the code 107 107 00:05:25,230 --> 00:05:27,350 in a very linear way, 108 108 00:05:27,350 --> 00:05:30,320 and then with some functions in between. 109 109 00:05:30,320 --> 00:05:32,310 Now about object-oriented programming 110 110 00:05:32,310 --> 00:05:33,970 and functional programming, 111 111 00:05:33,970 --> 00:05:36,470 I will talk about them in a second. 112 112 00:05:36,470 --> 00:05:40,440 Also, we can classify paradigms as imperative 113 113 00:05:40,440 --> 00:05:45,280 or as declarative, but again, more on that later. 114 114 00:05:45,280 --> 00:05:48,430 Now, many languages are only procedural 115 115 00:05:48,430 --> 00:05:50,500 or only object-oriented 116 116 00:05:50,500 --> 00:05:52,280 or only functional, 117 117 00:05:52,280 --> 00:05:55,020 but JavaScript does all of it. 118 118 00:05:55,020 --> 00:05:58,190 So it's really flexible and versatile. 119 119 00:05:58,190 --> 00:06:01,520 And so we can do really whatever we want with it. 120 120 00:06:01,520 --> 00:06:05,380 It's our choice. We can use whatever paradigm we want. 121 121 00:06:05,380 --> 00:06:08,703 And in this course, I will show you how to use all of them. 122 122 00:06:09,810 --> 00:06:13,620 So, about the object-oriented nature of JavaScript, 123 123 00:06:13,620 --> 00:06:17,840 it is a prototype-based, object-oriented approach. 124 124 00:06:17,840 --> 00:06:19,670 Now, what does that mean? 125 125 00:06:19,670 --> 00:06:24,670 Well, first, almost everything in JavaScript is an object, 126 126 00:06:24,750 --> 00:06:26,900 except for primitive values 127 127 00:06:26,900 --> 00:06:30,040 such as numbers, strings, et cetera. 128 128 00:06:30,040 --> 00:06:33,230 But arrays, for example, are just object. 129 129 00:06:33,230 --> 00:06:36,640 And we already saw that in practice, right? 130 130 00:06:36,640 --> 00:06:40,760 Now, have you ever wondered why we can create an array 131 131 00:06:40,760 --> 00:06:44,640 and then use the push method on it, for example? 132 132 00:06:44,640 --> 00:06:48,840 Well, it's because of prototypal inheritance. 133 133 00:06:48,840 --> 00:06:53,140 Basically, we create arrays from an array blueprint, 134 134 00:06:53,140 --> 00:06:57,480 which is like a template and this is called the prototype. 135 135 00:06:57,480 --> 00:07:01,170 This prototype contains all the array methods 136 136 00:07:01,170 --> 00:07:03,860 and the arrays that we create in our code 137 137 00:07:03,860 --> 00:07:07,380 then inherit the methods from the blueprint 138 138 00:07:07,380 --> 00:07:10,640 so that we can use them on the arrays. 139 139 00:07:10,640 --> 00:07:12,600 And this, what I just explained to you 140 140 00:07:12,600 --> 00:07:15,880 is actually a huge oversimplification, 141 141 00:07:15,880 --> 00:07:18,560 which might still sound confusing. 142 142 00:07:18,560 --> 00:07:21,540 And that's the reason why there is a whole section 143 143 00:07:21,540 --> 00:07:24,710 on object-oriented programming with JavaScript 144 144 00:07:24,710 --> 00:07:26,510 later in the course. 145 145 00:07:26,510 --> 00:07:29,040 But since this is a big overview lecture, 146 146 00:07:29,040 --> 00:07:32,623 I wanted to first introduce this topic right here. 147 147 00:07:33,850 --> 00:07:36,160 Next up, JavaScript is a language 148 148 00:07:36,160 --> 00:07:38,440 with first-class functions, 149 149 00:07:38,440 --> 00:07:40,410 which simply means that functions 150 150 00:07:40,410 --> 00:07:43,600 are treated just as regular variables. 151 151 00:07:43,600 --> 00:07:47,130 So, we can pass functions into other functions 152 152 00:07:47,130 --> 00:07:50,870 and we can even return functions from functions. 153 153 00:07:50,870 --> 00:07:53,240 And this is extremely powerful 154 154 00:07:53,240 --> 00:07:57,480 because it allows us to use a lot of powerful techniques 155 155 00:07:57,480 --> 00:08:01,090 and also allows for functional-programming, 156 156 00:08:01,090 --> 00:08:02,740 which is one of the paradigms 157 157 00:08:02,740 --> 00:08:05,230 that we just talked about before. 158 158 00:08:05,230 --> 00:08:06,370 And in fact, 159 159 00:08:06,370 --> 00:08:10,100 we have already used the power of first-class functions 160 160 00:08:10,100 --> 00:08:14,440 without knowing that they are called first-class functions. 161 161 00:08:14,440 --> 00:08:17,850 So remember this piece of code that we wrote 162 162 00:08:17,850 --> 00:08:21,060 for closing the modal window that we built before. 163 163 00:08:21,060 --> 00:08:24,320 So right here, we pass the closeModal function 164 164 00:08:24,320 --> 00:08:26,770 into the addEventListener function 165 165 00:08:26,770 --> 00:08:30,453 as if it was just a regular variable, right? 166 166 00:08:31,400 --> 00:08:35,740 And actually not all languages have first-class functions, 167 167 00:08:35,740 --> 00:08:39,100 but JavaScript has, and it is amazing. 168 168 00:08:39,100 --> 00:08:41,623 Believe me, it's really, really helpful. 169 169 00:08:43,130 --> 00:08:47,580 Next, I said that JavaScript is a dynamic language 170 170 00:08:47,580 --> 00:08:51,170 and dynamic actually means dynamically-typed. 171 171 00:08:51,170 --> 00:08:53,040 So as we've already seen, 172 172 00:08:53,040 --> 00:08:57,720 in JavaScript, we don't assign data types to variables. 173 173 00:08:57,720 --> 00:08:59,980 Instead, they only became known 174 174 00:08:59,980 --> 00:09:04,130 when the JavaScript engine executes our code. 175 175 00:09:04,130 --> 00:09:07,650 Also, the type of variables can easily be changed 176 176 00:09:07,650 --> 00:09:10,100 as we reassign variables. 177 177 00:09:10,100 --> 00:09:14,300 And this is basically what dynamically-typed means. 178 178 00:09:14,300 --> 00:09:18,670 Now there is a lot of controversy if this is good or bad, 179 179 00:09:18,670 --> 00:09:21,340 but this is just how it works. 180 180 00:09:21,340 --> 00:09:23,050 Now, the same is not true 181 181 00:09:23,050 --> 00:09:25,540 for most other programming languages, 182 182 00:09:25,540 --> 00:09:29,450 where we have to manually assign types, to variables. 183 183 00:09:29,450 --> 00:09:32,970 And this then usually prevents bugs from happening, 184 184 00:09:32,970 --> 00:09:36,430 which is the reason why many people say that JavaScript 185 185 00:09:36,430 --> 00:09:39,920 should be a strongly-typed language as well. 186 186 00:09:39,920 --> 00:09:43,800 And if you yourself want to use JavaScript with types, 187 187 00:09:43,800 --> 00:09:46,513 then you can always look into TypeScript. 188 188 00:09:47,420 --> 00:09:51,300 But anyway, let's now finally talk about the single-thread 189 189 00:09:51,300 --> 00:09:55,270 and the non-blocking event loop concurrency model. 190 190 00:09:55,270 --> 00:09:57,870 Now this is a really complex topic 191 191 00:09:57,870 --> 00:10:01,420 and probably the most complex one of the whole course, 192 192 00:10:01,420 --> 00:10:04,930 which is why it's kind of at the end of the course. 193 193 00:10:04,930 --> 00:10:05,780 And therefore, 194 194 00:10:05,780 --> 00:10:09,040 I'm not gonna go into specifics here just yet, 195 195 00:10:09,040 --> 00:10:12,810 but instead I will just define some things here. 196 196 00:10:12,810 --> 00:10:16,840 First, what actually is a concurrency model? 197 197 00:10:16,840 --> 00:10:19,190 Well, it's just a fancy term 198 198 00:10:19,190 --> 00:10:23,260 that means how the JavaScript engine handles multiple tasks 199 199 00:10:23,260 --> 00:10:25,540 happening at the same time. 200 200 00:10:25,540 --> 00:10:27,460 No, okay. That's cool. 201 201 00:10:27,460 --> 00:10:30,180 But why do we need that? 202 202 00:10:30,180 --> 00:10:35,180 Well, because JavaScript itself runs in one single-thread, 203 203 00:10:35,310 --> 00:10:39,040 which means that it can only do one thing at a time 204 204 00:10:39,040 --> 00:10:41,570 and therefore we need a way of handling 205 205 00:10:41,570 --> 00:10:44,930 multiple things happening at the same time. 206 206 00:10:44,930 --> 00:10:47,180 And by the way, in computing, 207 207 00:10:47,180 --> 00:10:50,280 a thread is like a set of instructions 208 208 00:10:50,280 --> 00:10:53,800 that is executed in the computer's CPU. 209 209 00:10:53,800 --> 00:10:56,830 So basically, the thread is where our code 210 210 00:10:56,830 --> 00:11:00,263 is actually executed in a machine's processor. 211 211 00:11:01,120 --> 00:11:05,400 All right. But what if there is a long-running task, 212 212 00:11:05,400 --> 00:11:08,690 like fetching data from a remote server? 213 213 00:11:08,690 --> 00:11:12,410 Well, it sounds like that would block the single thread 214 214 00:11:12,410 --> 00:11:15,030 where the code is running, right? 215 215 00:11:15,030 --> 00:11:17,480 But of course we don't want that. 216 216 00:11:17,480 --> 00:11:21,410 What we want is so-called non-blocking behavior 217 217 00:11:21,410 --> 00:11:24,210 and how do we achieve that? 218 218 00:11:24,210 --> 00:11:27,680 Well, by using a so-called event loop. 219 219 00:11:27,680 --> 00:11:30,480 The event loop takes long-running tasks, 220 220 00:11:30,480 --> 00:11:32,440 executes them in the background 221 221 00:11:32,440 --> 00:11:34,910 and then puts them back in the main thread 222 222 00:11:34,910 --> 00:11:37,010 once they are finished. 223 223 00:11:37,010 --> 00:11:38,430 And this is, in a nutshell, 224 224 00:11:38,430 --> 00:11:42,040 JavaScript's non-blocking event loop concurrency model 225 225 00:11:42,040 --> 00:11:44,100 with a single thread. 226 226 00:11:44,100 --> 00:11:46,990 It sounds like a mouthful for sure 227 227 00:11:46,990 --> 00:11:47,823 but in the end, 228 228 00:11:47,823 --> 00:11:51,230 it really just compresses to this. 229 229 00:11:51,230 --> 00:11:53,160 Just keep in mind that, again, 230 230 00:11:53,160 --> 00:11:57,373 this is a huge oversimplification that we will come back to. 231 231 00:11:58,340 --> 00:11:59,230 All right. 232 232 00:11:59,230 --> 00:12:02,710 And this actually rounds up this overview lecture. 233 233 00:12:02,710 --> 00:12:05,680 I know there was a ton of stuff to take in, 234 234 00:12:05,680 --> 00:12:08,380 but I hope that you still learned a thing or two here. 20636

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