Understanding Hoisting

Modern JavaScript Learn JavaScript Fundamentals
9 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$99.99
List Price:  $139.99
You save:  $40
€96.21
List Price:  €134.70
You save:  €38.49
£79.93
List Price:  £111.90
You save:  £31.97
CA$143.79
List Price:  CA$201.32
You save:  CA$57.52
A$160.48
List Price:  A$224.69
You save:  A$64.20
S$135.83
List Price:  S$190.17
You save:  S$54.33
HK$777.07
List Price:  HK$1,087.93
You save:  HK$310.86
CHF 89.45
List Price:  CHF 125.24
You save:  CHF 35.78
NOK kr1,141.95
List Price:  NOK kr1,598.78
You save:  NOK kr456.82
DKK kr717.64
List Price:  DKK kr1,004.72
You save:  DKK kr287.08
NZ$177.52
List Price:  NZ$248.53
You save:  NZ$71.01
د.إ367.25
List Price:  د.إ514.17
You save:  د.إ146.91
৳11,994.74
List Price:  ৳16,793.12
You save:  ৳4,798.37
₹8,496.63
List Price:  ₹11,895.62
You save:  ₹3,398.99
RM450.75
List Price:  RM631.07
You save:  RM180.32
₦155,628.43
List Price:  ₦217,886.03
You save:  ₦62,257.60
₨27,934.96
List Price:  ₨39,110.06
You save:  ₨11,175.10
฿3,444.45
List Price:  ฿4,822.37
You save:  ฿1,377.92
₺3,518.54
List Price:  ₺4,926.10
You save:  ₺1,407.55
B$617.53
List Price:  B$864.57
You save:  B$247.04
R1,837.80
List Price:  R2,572.99
You save:  R735.19
Лв188.31
List Price:  Лв263.64
You save:  Лв75.33
₩144,872.25
List Price:  ₩202,826.95
You save:  ₩57,954.69
₪364.89
List Price:  ₪510.86
You save:  ₪145.97
₱5,883.01
List Price:  ₱8,236.45
You save:  ₱2,353.44
¥15,672.80
List Price:  ¥21,942.55
You save:  ¥6,269.75
MX$2,028.91
List Price:  MX$2,840.56
You save:  MX$811.64
QR366.34
List Price:  QR512.89
You save:  QR146.55
P1,382.59
List Price:  P1,935.69
You save:  P553.09
KSh12,923.70
List Price:  KSh18,093.70
You save:  KSh5,170
E£5,091.27
List Price:  E£7,127.98
You save:  E£2,036.71
ብር12,764.56
List Price:  ብር17,870.89
You save:  ብር5,106.33
Kz91,790.82
List Price:  Kz128,510.82
You save:  Kz36,720
CLP$99,155.08
List Price:  CLP$138,821.08
You save:  CLP$39,666
CN¥729.81
List Price:  CN¥1,021.77
You save:  CN¥291.95
RD$6,104.52
List Price:  RD$8,546.58
You save:  RD$2,442.05
DA13,454.60
List Price:  DA18,836.98
You save:  DA5,382.37
FJ$232.11
List Price:  FJ$324.96
You save:  FJ$92.85
Q773.21
List Price:  Q1,082.52
You save:  Q309.31
GY$21,000.46
List Price:  GY$29,401.48
You save:  GY$8,401.02
ISK kr13,903.60
List Price:  ISK kr19,465.60
You save:  ISK kr5,562
DH1,007.40
List Price:  DH1,410.40
You save:  DH403
L1,841.78
List Price:  L2,578.57
You save:  L736.78
ден5,922.50
List Price:  ден8,291.74
You save:  ден2,369.23
MOP$803.42
List Price:  MOP$1,124.82
You save:  MOP$321.40
N$1,834.70
List Price:  N$2,568.66
You save:  N$733.95
C$3,694.32
List Price:  C$5,172.20
You save:  C$1,477.87
रु13,665.58
List Price:  रु19,132.35
You save:  रु5,466.77
S/374.71
List Price:  S/524.60
You save:  S/149.89
K406.86
List Price:  K569.63
You save:  K162.76
SAR375.72
List Price:  SAR526.02
You save:  SAR150.30
ZK2,777.96
List Price:  ZK3,889.25
You save:  ZK1,111.29
L478.81
List Price:  L670.35
You save:  L191.54
Kč2,418.25
List Price:  Kč3,385.65
You save:  Kč967.40
Ft39,800.47
List Price:  Ft55,722.25
You save:  Ft15,921.78
SEK kr1,103.66
List Price:  SEK kr1,545.17
You save:  SEK kr441.50
ARS$102,190.76
List Price:  ARS$143,071.15
You save:  ARS$40,880.39
Bs693.61
List Price:  Bs971.08
You save:  Bs277.47
COP$437,799.12
List Price:  COP$612,936.28
You save:  COP$175,137.16
₡50,480.33
List Price:  ₡70,674.48
You save:  ₡20,194.15
L2,548.03
List Price:  L3,567.35
You save:  L1,019.31
₲784,126.06
List Price:  ₲1,097,807.85
You save:  ₲313,681.79
$U4,460.41
List Price:  $U6,244.75
You save:  $U1,784.34
zł409.96
List Price:  zł573.96
You save:  zł164
Already have an account? Log In

Transcript

In this movie, we're going to talk about another concept that's somewhat unique to JavaScript. And that's hoisting. The best way to introduce this is to show an example. So I'm going to jump over to sublime been using the console a lot in the last several movies. So just to introduce you, again, I have an HTML page. It's linked to a CSS file that has a minimal CSS in it very little, as you can see.

And it's also linked to a JavaScript file down here at the bottom app j. s. And app dot j. s is where I have some JavaScript code that we want to take a look at. Now, let me explain this, this JavaScript code. We have a function in here which we haven't introduced yet, but I want to use this function here because it helps illustrate the concept of hoisting which is a concept I think, is about important to understand. So down here is the function. I've simply defined it a function is simply a group of code that I can execute it anytime I want, when that code executes is when I call the function and I call the function up here. So calling it use the name of the function and then use parentheses parentheses, say to execute that function.

And so it will then come execute this code. All right, at the start of this code, I declare a variable name, set it equal to Steven, then I call the function. The function simply does a console dot log. It takes one variable concatenates to another, and to another and prints it out. It's the exact same thing as what's being done up here. Okay.

Now the thing that's a little bit different about this is these variables that are used in a console dot log statement. are not declared until after the function is called until after the console dot log message is sent. So here's the declaration for greeting. And here's the declaration for punctuation. Now in a lot of programming languages, this would cause an error, because we have not declared the variable before we use it. Not so in JavaScript.

So let's take a look at what's happening. So I'm going to come to my HTML page and just copy the path there. I'm going to jump back. I'm going to reduce this a bit so you can see what's going on. jump back to the browser, and I'm going to paste in that path. And then go ahead and display that sample HTML page.

Now let me open the console. Now I'm going to change the console. So let's attach to the bottom so we can see it as I refresh it, we can see what changes now, so no error was displayed. However, we do have undefined undefined for the variable. That were declared later. Okay.

So this first this is the this first statement here is the console dot log that was called in the function. And this second is the console dot log that was not inside the function. Okay, so let me pull up, go back to the code again. So we can see that. So since we call the function first that executed first, but the variable had not been defined yet, even though it's above it in the code, we're executing it before it gets to this line. Okay, so the variable is not defined.

However, there no no error is presented. And that's where the hoisting concept comes into play. Both of these executed without an error. Here's what JavaScript does when it goes through the code. Initially, every variable it encounters, it sets up, sets aside some memory space for It does not put a value in that memory space until it gets to the line of code when it's executing. But initially, it will set up memory space for it before even any code is executed at all.

And so it goes through this this bunch of code and it identifies this variable, this variable, this variable sets up space for it in memory. So it already knows those variables exist, because it does that. When we hit this console dot log statement, or this one, it doesn't throw an error, because it knows those variables have been declared. They just do not have a value yet. They don't receive a value until after we've executed this executed this. Now, greeting gets a value.

Now punctuation gets a value. That's the concept of hoisting. The reason that is important to know is, once again, it can cause problems if you rely on hosting, hoisting. And so if you see a situation where you're wondering why is This variable undefined, that may give you a clue. Now in just a moment, I'm going to show you a practice you should follow to prevent problems from hoisting. But first, let me show you one more thing that is kind of interesting.

Okay, I'm going to declare greeting here, not with var, I'm just assigning it a value. So technically, I'm not declaring it, I'm assigning it a value, and then also punctuation as well. Now, what do you think's going to print out with this console dot log statement. And this one, remember, this one will execute first, because the function is called here. And then this one will execute. What do you think we're going to see?

Let me save it. jump back to the HTML page, and we'll refresh. Notice that Both console dot log statements come out with Hi, Steven. So let's jump back to the code. So what happened is JavaScript first identifies all the variables and sets up a memory space, then it starts executing sets name equal to Steven, it calls test jumps down to test sets, greeting equal to high, says punctuation equal to question mark, then it does this console dot log, then it acts acts as out of the function comes back here does this console dot log, then we have the two statements where they're actually declared, but JavaScript already saw those instead of side a memory, memory space for them. So when it gets to this point, it would then change to Hello there, an exclamation point just to show that let me copy this and put it after this.

Save it. Let's execute it one more time. And now we see three console dot log statements and the third one is as we expect Good. All right. So, the way to eliminate this from happening or having issues with hoisting is you should declare all your variables at the top of your code, or at the top of a function for those that are being used within a function. Okay?

So in this example, we should declare all our variables up here. And let me show you a little technique that for declaring variables, multiple variables at once. Notice how I'm putting a comma after each variable until I get to the last variable that's declared. Now let's get rid of these statements. Because we cannot that will cause an error if we declare A variable twice using the var keyword. I'm going to get rid of these two down here.

Okay. So this is the correct way to declare those variables, we can then change them later on. But declaring with the var keyword should be done up here. Now this could have been could have been done on three separate lines with three bars and a semi colon at the end of each one. But when you're declaring a lot of variables together, this is a shortcut way for doing it, put a comma, and then I usually indented so I know that this is all part of the same line, and then another comma, and then when we're done declaring all the variables we put a semi colon. So that's something you can keep in mind, a pattern which which is helpful.

The pattern which is important is declaring the variables at the top of your code. Let's go ahead and save this. execute it one more time. Now since we declared the variables that the Top. They both say hello there, Stephen. That's hoisting an important concept to remember.

And an important pattern is to declare variables at the top to avoid problems which come from hoisting

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.