Understanding Scope Part 2

Modern JavaScript Incorporating Functions
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
€93.98
List Price:  €131.57
You save:  €37.59
£80.28
List Price:  £112.40
You save:  £32.11
CA$138.08
List Price:  CA$193.32
You save:  CA$55.23
A$155.74
List Price:  A$218.04
You save:  A$62.30
S$136.25
List Price:  S$190.76
You save:  S$54.50
HK$782.98
List Price:  HK$1,096.21
You save:  HK$313.22
CHF 91.14
List Price:  CHF 127.60
You save:  CHF 36.46
NOK kr1,098.40
List Price:  NOK kr1,537.80
You save:  NOK kr439.40
DKK kr701.21
List Price:  DKK kr981.73
You save:  DKK kr280.51
NZ$169.22
List Price:  NZ$236.92
You save:  NZ$67.69
د.إ367.20
List Price:  د.إ514.09
You save:  د.إ146.89
৳10,977.89
List Price:  ৳15,369.49
You save:  ৳4,391.59
₹8,365.11
List Price:  ₹11,711.49
You save:  ₹3,346.38
RM479.10
List Price:  RM670.76
You save:  RM191.66
₦120,104.65
List Price:  ₦168,151.32
You save:  ₦48,046.66
₨27,833.48
List Price:  ₨38,967.99
You save:  ₨11,134.50
฿3,681.88
List Price:  ฿5,154.78
You save:  ฿1,472.90
₺3,251.57
List Price:  ₺4,552.33
You save:  ₺1,300.75
B$528.60
List Price:  B$740.07
You save:  B$211.46
R1,902.92
List Price:  R2,664.17
You save:  R761.24
Лв183.76
List Price:  Лв257.28
You save:  Лв73.51
₩138,255.79
List Price:  ₩193,563.64
You save:  ₩55,307.85
₪376.37
List Price:  ₪526.94
You save:  ₪150.56
₱5,722.47
List Price:  ₱8,011.69
You save:  ₱2,289.21
¥15,461.20
List Price:  ¥21,646.30
You save:  ¥6,185.10
MX$1,698.40
List Price:  MX$2,377.83
You save:  MX$679.43
QR364.94
List Price:  QR510.94
You save:  QR145.99
P1,382.56
List Price:  P1,935.64
You save:  P553.08
KSh13,248.67
List Price:  KSh18,548.67
You save:  KSh5,300
E£4,879.07
List Price:  E£6,830.89
You save:  E£1,951.82
ብር5,691.67
List Price:  ብር7,968.56
You save:  ብር2,276.89
Kz83,741.62
List Price:  Kz117,241.62
You save:  Kz33,500
CLP$98,036.19
List Price:  CLP$137,254.59
You save:  CLP$39,218.40
CN¥723.78
List Price:  CN¥1,013.33
You save:  CN¥289.54
RD$5,909.81
List Price:  RD$8,273.97
You save:  RD$2,364.16
DA13,475.51
List Price:  DA18,866.26
You save:  DA5,390.74
FJ$227.51
List Price:  FJ$318.52
You save:  FJ$91.01
Q778.01
List Price:  Q1,089.25
You save:  Q311.23
GY$20,943.86
List Price:  GY$29,322.24
You save:  GY$8,378.38
ISK kr14,144.58
List Price:  ISK kr19,802.98
You save:  ISK kr5,658.40
DH1,017.39
List Price:  DH1,424.39
You save:  DH407
L1,786.82
List Price:  L2,501.62
You save:  L714.80
ден5,782.34
List Price:  ден8,095.50
You save:  ден2,313.16
MOP$806.92
List Price:  MOP$1,129.72
You save:  MOP$322.80
N$1,901.80
List Price:  N$2,662.60
You save:  N$760.80
C$3,681.76
List Price:  C$5,154.62
You save:  C$1,472.85
रु13,382.26
List Price:  रु18,735.71
You save:  रु5,353.44
S/373.93
List Price:  S/523.52
You save:  S/149.59
K378.80
List Price:  K530.34
You save:  K151.53
SAR375.07
List Price:  SAR525.11
You save:  SAR150.04
ZK2,508.25
List Price:  ZK3,511.66
You save:  ZK1,003.40
L467.60
List Price:  L654.66
You save:  L187.05
Kč2,369.93
List Price:  Kč3,318
You save:  Kč948.06
Ft36,898.16
List Price:  Ft51,658.91
You save:  Ft14,760.74
SEK kr1,094.62
List Price:  SEK kr1,532.51
You save:  SEK kr437.89
ARS$86,865.91
List Price:  ARS$121,615.75
You save:  ARS$34,749.84
Bs693.67
List Price:  Bs971.16
You save:  Bs277.49
COP$390,802.63
List Price:  COP$547,139.32
You save:  COP$156,336.68
₡50,098.77
List Price:  ₡70,140.28
You save:  ₡20,041.51
L2,469.54
List Price:  L3,457.46
You save:  L987.91
₲740,758.16
List Price:  ₲1,037,091.06
You save:  ₲296,332.90
$U3,889.78
List Price:  $U5,445.86
You save:  $U1,556.07
zł408.85
List Price:  zł572.41
You save:  zł163.55
Already have an account? Log In

Transcript

We've dealt with scope quite a bit. In this second part, we're going to look at some additional examples to help you understand scope. In the previous movie we left off here, I want to change things up a bit, so I'm going to copy in some new code. This time we have a function test to inside that function, we declare a variable num one, set it to 50. Inside that function, we declare another function test three, and inside that function, we console log number one and number two. Then inside of test two, we console log number one, number two as well.

And then at the very bottom of the function test two, we call test three. Okay, so function test two is has has been defined within the global environment. These variables have been defined within the global environment. What about test three? Well, let's see what happens. If I try to call test three from the global environment, save that.

Open the console uncaught reference error test three is not defined. Test three has been defined within the environment that exists inside a function test two, therefore it is not accessible outside of that environment. Only test two is that would also be true if I tried to log number one and number one is no longer defined in the world. Global Environment. It's only defined inside this function. So let's take a look at that.

Let me make one change First, let me get rid of test three. So we don't have that confusing us. Refresh. And uncaught reference error number one is not defined. So once again, now num one is not a part of a global environment is only part of the test to function environment. Alright, return this to how it was.

The next thing we want to do is called test to get rid of that console dot log statement. So let's walk through test two and see what's going to happen. What are the first things is going to display Is this and this going to display first or Well, these statements? Well, these two should display first because this function hasn't even been called. It's called down here. Okay, so we should get these two displayed first.

Before that is called. Alright, let's save that and go. Let's go ahead and see what happens. Refresh. I'm going to move the console over here a bit. And I'm going to make sublime a bit smaller.

So we can see what's going on. So the very first line to that we received was this console dot log statement, and it displayed num one. It did not display this value. It displayed the value inside of test two Which it first looks at its scope, which is inside of this environment. If it's not found, then it will go outside to the outside environment and locate it. But num one was discovered, prints it out, it's 50, then num 275.

It jumps outside and grabs this one, then test three is called which num one and m two does it use? Well, it first looks inside its environment. Then it goes to its outer environment, which is test two, it finds num one there displays it for num two, it can't find it inside its environment goes to its outer environments not found there. It goes to the next outer environment. So this is a chain it keeps moving up until it either finds the variable or it's gotten to the global environment and it can't go any further. It did find it in the global environment.

And so it prints out 75 as we see there. Now hopefully is exactly these examples help you understand scope. And hopefully it helps you picture the environment in which code executes because that's really the scope. When a variable is defined within a particular environment, that is the scope of that variable if it's defined in the global environment, its scope is global, if it's defined within a function in scope is within that function. If you use the let keyword to define the variable its scope is within a block of code. So very important to remember scope.

Now before we leave this topic, I want to show you one additional thing to be aware of a common mistake that happens I'm going to copy in function test one, which we used in our previous movie, I'm going to remove from test to that variable definition and I'm going to put Variable definition up here for number one, okay. Now we're going to call test one and test two. We're going to invoke both of them and see what we get. Now this is one, two, so let me quickly change this to three so that we can help keep these straight. Four, five, and six. Go ahead and save.

Jump out, refresh, bring up the console and then let me jump back to sublime so we can compare what's going on. Alright, so in test one, num one is displayed as a 10. Num two is displayed as 75. But then when test two is called number one Right, here's displayed is 25. Ah, does that give you a little more enlightenment about scope. Notice that test two cannot go back and grab this redefinition of the variable.

Because its scope is simply test one. It grabs this one, because this is the outer environment. And so num one equals 25. And that's true for test three as well, because it first looks inside of itself, then inside a test two, then inside the global environment, which is which are these values here. Alright, I'm going to make one more change. And then notice what happens.

You can remove the var keyword, that's all I'm going to do. Save it. Refresh, open the console. And let's open sublime again. A difference has happened. It looks like this line here redefined the global variable num one.

And that's exactly what it did. Because we did not use the var keyword inside of this function, it assumed we were referring to a global variable, that it looked for a variable on the out in the outer environment. And it redefined that. That is why it is so important to always use var or left when you're defining variables. Otherwise, you might redefine a variable that's defined in the global environment and it could affect your code. So this should have var in front of it in order to prevent that mistake.

That is a mistake. That is common among JavaScript developers that don't understand sculpin some of the the nuances of JavaScript. Now that you understand it, you won't make that mistake you will constantly use var when you're defining your variables a very important habit to get into. Alright, let's move to the next topic.

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.