Javascript中的范围问题

时间:2008-11-29 11:40:58

标签: javascript scoping

我需要在Javascript中获得有关范围问题的一些信息。我知道它支持词法(静态)范围,但是,它是否也支持动态范围? 如果您对Javascript中的范围有任何了解,请与我分享?

由于

2 个答案:

答案 0 :(得分:8)

我认为你很困惑,因为Javascript使用静态作用域但是在函数级别,而不是像通常的结构化语言一样在块级别。

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

所以要小心,块不做范围! 这就是为什么你有时会看到带有函数的循环,只是为了启用范围在迭代中的变量:

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

答案 1 :(得分:1)

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

我在上面吗?