Please explain automatically global in javascript












0















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.










share|improve this question

























  • Possible duplicate of What is the scope of variables in JavaScript?

    – Abana Clara
    Nov 16 '18 at 2:39
















0















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.










share|improve this question

























  • Possible duplicate of What is the scope of variables in JavaScript?

    – Abana Clara
    Nov 16 '18 at 2:39














0












0








0








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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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



















  • 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












3 Answers
3






active

oldest

votes


















1














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.






share|improve this answer
























  • 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



















2














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.






share|improve this answer































    0














    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.






    share|improve this answer























      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
      });


      }
      });














      draft saved

      draft discarded


















      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









      1














      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.






      share|improve this answer
























      • 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
















      1














      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.






      share|improve this answer
























      • 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














      1












      1








      1







      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.






      share|improve this answer













      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.







      share|improve this answer












      share|improve this answer



      share|improve this answer










      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 run myFunction, 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











      • Right, if you never run myFunction, 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













      2














      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.






      share|improve this answer




























        2














        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.






        share|improve this answer


























          2












          2








          2







          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.






          share|improve this answer













          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.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 16 '18 at 2:46









          hypp ersterhypp erster

          212




          212























              0














              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.






              share|improve this answer




























                0














                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.






                share|improve this answer


























                  0












                  0








                  0







                  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.






                  share|improve this answer













                  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.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 16 '18 at 2:43









                  msg45fmsg45f

                  333613




                  333613






























                      draft saved

                      draft discarded




















































                      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.




                      draft saved


                      draft discarded














                      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





















































                      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







                      Popular posts from this blog

                      Guess what letter conforming each word

                      Port of Spain

                      Run scheduled task as local user group (not BUILTIN)