Please explain automatically global in javascript
I cannot understand the idea behind automatically global. I am reading the following:
https://www.w3schools.com/js/js_scope.asp
https://www.w3schools.com/js/tryit.asp?filename=tryjs_local_global
The function myFunction() is called. if I remove this call it displays nothing. I can't understand why the call to myFunction() is necessary for the undeclared variable in myFunction() to be automatically global. Seems not so intuitive.
javascript
add a comment |
I cannot understand the idea behind automatically global. I am reading the following:
https://www.w3schools.com/js/js_scope.asp
https://www.w3schools.com/js/tryit.asp?filename=tryjs_local_global
The function myFunction() is called. if I remove this call it displays nothing. I can't understand why the call to myFunction() is necessary for the undeclared variable in myFunction() to be automatically global. Seems not so intuitive.
javascript
Possible duplicate of What is the scope of variables in JavaScript?
– Abana Clara
Nov 16 '18 at 2:39
add a comment |
I cannot understand the idea behind automatically global. I am reading the following:
https://www.w3schools.com/js/js_scope.asp
https://www.w3schools.com/js/tryit.asp?filename=tryjs_local_global
The function myFunction() is called. if I remove this call it displays nothing. I can't understand why the call to myFunction() is necessary for the undeclared variable in myFunction() to be automatically global. Seems not so intuitive.
javascript
I cannot understand the idea behind automatically global. I am reading the following:
https://www.w3schools.com/js/js_scope.asp
https://www.w3schools.com/js/tryit.asp?filename=tryjs_local_global
The function myFunction() is called. if I remove this call it displays nothing. I can't understand why the call to myFunction() is necessary for the undeclared variable in myFunction() to be automatically global. Seems not so intuitive.
javascript
javascript
edited Nov 16 '18 at 2:48
lilredindy
asked Nov 16 '18 at 2:32
lilredindylilredindy
167
167
Possible duplicate of What is the scope of variables in JavaScript?
– Abana Clara
Nov 16 '18 at 2:39
add a comment |
Possible duplicate of What is the scope of variables in JavaScript?
– Abana Clara
Nov 16 '18 at 2:39
Possible duplicate of What is the scope of variables in JavaScript?
– Abana Clara
Nov 16 '18 at 2:39
Possible duplicate of What is the scope of variables in JavaScript?
– Abana Clara
Nov 16 '18 at 2:39
add a comment |
3 Answers
3
active
oldest
votes
All it means is in this code:
function myFunction() {
carName = "Volvo";
}
carName
exists outside myFunction
after its execution, and is usable by other code. Whereas:
function myFunction() {
var carName = "Volvo";
}
carName
only exists within myFunction
, even after it's called. Code outside myFunction
can't see it.
oh i see, it needs to be EXECUTED first...hmm i guess that would make sense
– lilredindy
Nov 16 '18 at 2:39
Right, if you never runmyFunction
,carName
doesn't ever exist, in any scope.
– ceejayoz
Nov 16 '18 at 2:41
add a comment |
expression
var varName = 'value';
declares variable with var varName
and then assign a value 'value' to it with = 'value'
expression
varName = 'value';
just making the assignment a value 'value'
to a variable 'varName' which should be declared previously
so
function a() {
var varName = 'a'
}
declare the variable varName
locally and initiate it with 'a'
but
function b() {
varName = 'b'
}
just assigns the variable varName
with the value 'b'
. but the variable varName
is to be declare in the paren global scope.
add a comment |
When you 'declare' a variable with no explicit declaration keyword (var/let/const), then there is some ambiguity as to whether your intention was to reference an existing variable that may or may not be in a higher scope or to declare a new variable. Much of JavaScript's early defining behavior was to try to have fallback behavior for flexibility. When a variable is assigned to but there is no existing reference, it falls back to creating a variable. And without any declaration keyword there is no way to infer where your intended scope is, so it creates it in a global scope so that other possible references might find it.
In your case, when you call the function it references some variable. JavaScript doesn't know if this was meant to already exist or not, so it creates it in the global scope. As a result, it is still within scope and referenceable after the method is called.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330616%2fplease-explain-automatically-global-in-javascript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
All it means is in this code:
function myFunction() {
carName = "Volvo";
}
carName
exists outside myFunction
after its execution, and is usable by other code. Whereas:
function myFunction() {
var carName = "Volvo";
}
carName
only exists within myFunction
, even after it's called. Code outside myFunction
can't see it.
oh i see, it needs to be EXECUTED first...hmm i guess that would make sense
– lilredindy
Nov 16 '18 at 2:39
Right, if you never runmyFunction
,carName
doesn't ever exist, in any scope.
– ceejayoz
Nov 16 '18 at 2:41
add a comment |
All it means is in this code:
function myFunction() {
carName = "Volvo";
}
carName
exists outside myFunction
after its execution, and is usable by other code. Whereas:
function myFunction() {
var carName = "Volvo";
}
carName
only exists within myFunction
, even after it's called. Code outside myFunction
can't see it.
oh i see, it needs to be EXECUTED first...hmm i guess that would make sense
– lilredindy
Nov 16 '18 at 2:39
Right, if you never runmyFunction
,carName
doesn't ever exist, in any scope.
– ceejayoz
Nov 16 '18 at 2:41
add a comment |
All it means is in this code:
function myFunction() {
carName = "Volvo";
}
carName
exists outside myFunction
after its execution, and is usable by other code. Whereas:
function myFunction() {
var carName = "Volvo";
}
carName
only exists within myFunction
, even after it's called. Code outside myFunction
can't see it.
All it means is in this code:
function myFunction() {
carName = "Volvo";
}
carName
exists outside myFunction
after its execution, and is usable by other code. Whereas:
function myFunction() {
var carName = "Volvo";
}
carName
only exists within myFunction
, even after it's called. Code outside myFunction
can't see it.
answered Nov 16 '18 at 2:35
ceejayozceejayoz
141k34215300
141k34215300
oh i see, it needs to be EXECUTED first...hmm i guess that would make sense
– lilredindy
Nov 16 '18 at 2:39
Right, if you never runmyFunction
,carName
doesn't ever exist, in any scope.
– ceejayoz
Nov 16 '18 at 2:41
add a comment |
oh i see, it needs to be EXECUTED first...hmm i guess that would make sense
– lilredindy
Nov 16 '18 at 2:39
Right, if you never runmyFunction
,carName
doesn't ever exist, in any scope.
– ceejayoz
Nov 16 '18 at 2:41
oh i see, it needs to be EXECUTED first...hmm i guess that would make sense
– lilredindy
Nov 16 '18 at 2:39
oh i see, it needs to be EXECUTED first...hmm i guess that would make sense
– lilredindy
Nov 16 '18 at 2:39
Right, if you never run
myFunction
, carName
doesn't ever exist, in any scope.– ceejayoz
Nov 16 '18 at 2:41
Right, if you never run
myFunction
, carName
doesn't ever exist, in any scope.– ceejayoz
Nov 16 '18 at 2:41
add a comment |
expression
var varName = 'value';
declares variable with var varName
and then assign a value 'value' to it with = 'value'
expression
varName = 'value';
just making the assignment a value 'value'
to a variable 'varName' which should be declared previously
so
function a() {
var varName = 'a'
}
declare the variable varName
locally and initiate it with 'a'
but
function b() {
varName = 'b'
}
just assigns the variable varName
with the value 'b'
. but the variable varName
is to be declare in the paren global scope.
add a comment |
expression
var varName = 'value';
declares variable with var varName
and then assign a value 'value' to it with = 'value'
expression
varName = 'value';
just making the assignment a value 'value'
to a variable 'varName' which should be declared previously
so
function a() {
var varName = 'a'
}
declare the variable varName
locally and initiate it with 'a'
but
function b() {
varName = 'b'
}
just assigns the variable varName
with the value 'b'
. but the variable varName
is to be declare in the paren global scope.
add a comment |
expression
var varName = 'value';
declares variable with var varName
and then assign a value 'value' to it with = 'value'
expression
varName = 'value';
just making the assignment a value 'value'
to a variable 'varName' which should be declared previously
so
function a() {
var varName = 'a'
}
declare the variable varName
locally and initiate it with 'a'
but
function b() {
varName = 'b'
}
just assigns the variable varName
with the value 'b'
. but the variable varName
is to be declare in the paren global scope.
expression
var varName = 'value';
declares variable with var varName
and then assign a value 'value' to it with = 'value'
expression
varName = 'value';
just making the assignment a value 'value'
to a variable 'varName' which should be declared previously
so
function a() {
var varName = 'a'
}
declare the variable varName
locally and initiate it with 'a'
but
function b() {
varName = 'b'
}
just assigns the variable varName
with the value 'b'
. but the variable varName
is to be declare in the paren global scope.
answered Nov 16 '18 at 2:46
hypp ersterhypp erster
212
212
add a comment |
add a comment |
When you 'declare' a variable with no explicit declaration keyword (var/let/const), then there is some ambiguity as to whether your intention was to reference an existing variable that may or may not be in a higher scope or to declare a new variable. Much of JavaScript's early defining behavior was to try to have fallback behavior for flexibility. When a variable is assigned to but there is no existing reference, it falls back to creating a variable. And without any declaration keyword there is no way to infer where your intended scope is, so it creates it in a global scope so that other possible references might find it.
In your case, when you call the function it references some variable. JavaScript doesn't know if this was meant to already exist or not, so it creates it in the global scope. As a result, it is still within scope and referenceable after the method is called.
add a comment |
When you 'declare' a variable with no explicit declaration keyword (var/let/const), then there is some ambiguity as to whether your intention was to reference an existing variable that may or may not be in a higher scope or to declare a new variable. Much of JavaScript's early defining behavior was to try to have fallback behavior for flexibility. When a variable is assigned to but there is no existing reference, it falls back to creating a variable. And without any declaration keyword there is no way to infer where your intended scope is, so it creates it in a global scope so that other possible references might find it.
In your case, when you call the function it references some variable. JavaScript doesn't know if this was meant to already exist or not, so it creates it in the global scope. As a result, it is still within scope and referenceable after the method is called.
add a comment |
When you 'declare' a variable with no explicit declaration keyword (var/let/const), then there is some ambiguity as to whether your intention was to reference an existing variable that may or may not be in a higher scope or to declare a new variable. Much of JavaScript's early defining behavior was to try to have fallback behavior for flexibility. When a variable is assigned to but there is no existing reference, it falls back to creating a variable. And without any declaration keyword there is no way to infer where your intended scope is, so it creates it in a global scope so that other possible references might find it.
In your case, when you call the function it references some variable. JavaScript doesn't know if this was meant to already exist or not, so it creates it in the global scope. As a result, it is still within scope and referenceable after the method is called.
When you 'declare' a variable with no explicit declaration keyword (var/let/const), then there is some ambiguity as to whether your intention was to reference an existing variable that may or may not be in a higher scope or to declare a new variable. Much of JavaScript's early defining behavior was to try to have fallback behavior for flexibility. When a variable is assigned to but there is no existing reference, it falls back to creating a variable. And without any declaration keyword there is no way to infer where your intended scope is, so it creates it in a global scope so that other possible references might find it.
In your case, when you call the function it references some variable. JavaScript doesn't know if this was meant to already exist or not, so it creates it in the global scope. As a result, it is still within scope and referenceable after the method is called.
answered Nov 16 '18 at 2:43
msg45fmsg45f
333613
333613
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330616%2fplease-explain-automatically-global-in-javascript%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Possible duplicate of What is the scope of variables in JavaScript?
– Abana Clara
Nov 16 '18 at 2:39