javascript - Variable scope in function expressions -


i've been learning basics of javascript lately , have spent quite time disassembling function expressions better understand them. i'm still bit unsure happens in few examples , explanation on if i'm wrong, or @ least confirmation whether train of thought correct.

there 3 snippets of code slight differences in them:

var my_number = 7;  var timestwo = function(number) {     my_number = number * 2;     console.log("inside " + my_number); };  timestwo(5); console.log("outside " + my_number); 

.

var my_number = 7;  var timestwo = function(number) {     var my_number = number * 2;     console.log("inside " + my_number); };  timestwo(5); console.log("outside " + my_number); 

.

var my_number = 7;  var timestwo = function(my_number) {     my_number = my_number * 2;     console.log("inside " + my_number); };  timestwo(5); console.log("outside " + my_number); 

what i'm curious happens make them work do.

the first case seems relatively straight forward - my_number starts global, number local function , my_number changed inside function it's 10 in global frame.

the second case seems clear - it's similar first one, there new local variable my_number inside function assigned 10, , outside function my_number still 7.

what unsure third piece. assume since mentions of number my_number, function creates new my_number variable in following line:

var timestwo = function(my_number) 

even though there no var my_number in function body?

var my_number = 7;  var timestwo = function(number) {     my_number = number * 2;     console.log("inside " + my_number); };  timestwo(5); console.log("outside " + my_number); 

this first example declares my_number in global scope , sets value 7. timestwo function accepts argument in parameter, referenced number within function. when function called, setting my_number variable defined in global scope equal passed in argument multiplied two. logging same result both "inside" , "outside" calls.

var my_number = 7;  var timestwo = function(number) {     var my_number = number * 2;     console.log("inside " + my_number); };  timestwo(5); console.log("outside " + my_number); 

in second example, declaring locally scoped my_number within timestwo function. because of this, logging different my_number variables in "inside" , "outside" calls.

var my_number = 7;  var timestwo = function(my_number) {     my_number = my_number * 2;     console.log("inside " + my_number); };  timestwo(5); console.log("outside " + my_number); 

in third example, timestwo accepts parameter , using variable my_number keep track of it.


Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - .htaccess mod_rewrite for dynamic url which has domain names -

Website Login Issue developed in magento -