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?

2 Answers 2

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
Sign up to request clarification or add additional context in comments.

Comments

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?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.