About scoping in JavaScript
Asked Answered
B

2

3

I need to have some information about the scoping in JavaScript. I know that it supports lexical (static) scoping, but, does not it support dynamic scoping as well?

Brooch answered 29/11, 2008 at 11:41 Comment(0)
T
8

I think you're confused because Javascript uses static scoping but at function-level, not at block level like usual structured languages.

var foo = "old";
if (true) {var foo = "new";}
alert (foo == "new")

So be careful, blocks don't make scope! That's why you sometimes see loops with functions inside just to enable variables whose scope is inside an iteration:

functions = [];
for(var i=0; i<10; i++) {
   (function(){
       var local_i = i;
       functions[local_i] = function() {return local_i;}
   })();
}
functions[2]() // returns 2 and not 10
Tentation answered 29/11, 2008 at 11:41 Comment(0)
B
0

As far as I understood; Javascript has two kinds of variables which are global and local variables. But, suppose we have a variable called x, which is defined as global, and defined in the static parent of the scope of place where x is referenced. In this case, x takes the value of the global variable. Thus, global variable has higher priority than local ones. And, when there is no any global variables, x finds the declaration through the static chain which makes me think that Javascirpt is staticaly scoped language.

Am I right at above?

Brooch answered 29/11, 2008 at 11:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.