Javascript function scoping and hoisting Javascript function scoping and hoisting javascript javascript

Javascript function scoping and hoisting


Function hoisting means that functions are moved to the top of their scope. That is,

function b() {     a = 10;     return;     function a() {} } 

will be rewritten by the interpeter to this

function b() {  function a() {}  a = 10;  return;}

Weird, eh?

Also, in this instance,

function a() {}

behaved the same as

var a = function () {};

So, in essence, this is what the code is doing:

var a = 1;                 //defines "a" in global scopefunction b() {     var a = function () {}; //defines "a" in local scope    a = 10;                 //overwrites local variable "a"   return;      }       b();       alert(a);                 //alerts global variable "a"


What you have to remember is that it parses the whole function and resolves all the variables declarations before executing it. So....

function a() {} 

really becomes

var a = function () {}

var a forces it into a local scope, and variable scope is through the entire function, so the global a variable is still 1 because you have declared a into a local scope by making it a function.


The function a is hoisted inside function b:

var a = 1; function b() {    function a() {}    a = 10;    return;} b(); alert(a);

which is almost like using var:

var a = 1; function b() {    var a = function () {};   a = 10;    return;} b(); alert(a);

The function is declared locally, and setting a only happens in the local scope, not the global var.