Scoping issue in Javascript

点点圈 提交于 2019-12-03 17:32:30

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
Mcad

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?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!