2008-11-29 62 views
3

我需要了解关于Javascript中范围问题的一些信息。我知道它支持词法(静态)范围确定,但是,它不支持动态范围确定吗? 如果你知道关于Javascript的范围界定方面的任何事情,你可以和我分享一下吗?Javascript中的范围界定问题

感谢

回答

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

至于我的理解; Javascript有两种变量,它们是全局变量和局部变量。但是,假设我们有一个名为x的变量,它定义为全局变量,并且在引用x的地方范围的静态父级中定义。在这种情况下,x取全局变量的值。因此,全局变量比本地变量具有更高的优先级。而且,当没有任何全局变量时,x通过静态链发现声明,这让我认为Javascirpt是静态范围的语言。

我对吗?

+0

否...阅读http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Histing – w00t 2012-02-10 09:28:16