var c = 1;
function myFunction(){
c = 2;
var c = 4;
console.log(c);
}
console.log(c);
myFunction();
console.log(c);
Why is the last console.log spitting out 1? Here is how it is supposed to work in my brain:
var c = 1; // create global variable called 'c'
function myFunction(){
c = 2; // assign value of global 'c' to 2
var c = 4; // create a new variable called 'c' which has a new address in memory (right?) with a value of 4
console.log(c); // log the newly created 'c' variable (which has the value of 4)
}
console.log(c); //log the global c
myFunction(); //log the internal c
console.log(c); //log the updated global c
In the scope where your console.log runs, only the global variable exists. And the function never touches the global variable.
The details:
Due to the hoisting mentioned above, your function behaves as if the code was:
Some references about hoisting
var
statement