English 中文(简体)
关于JavaScript中的作用域
原标题:
  • 时间:2008-11-29 11:40:58
  •  标签:

我需要了解一些JavaScript中作用域的信息。我知道它支持词法(静态)作用域,但是它也支持动态作用域吗?

最佳回答

我认为你感到困惑是因为JavaScript使用静态作用域,但是它是在函数级别上,而不是像常规结构化语言一样在块级别上。

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
问题回答

据我所了解,Javascript有两种变量,全局变量和局部变量。但是,假设我们有一个名为x的变量,它被定义为全局变量,并在引用x的范围的静态父级中定义。在这种情况下,x获取全局变量的值。因此,全局变量优先于局部变量。而且,当没有任何全局变量时,x通过静态链找到申明,这使我认为Javascirpt是一种静态作用域语言。

我上面说的对吗?





相关问题
热门标签