【问题标题】:Scoping issue in JavascriptJavascript中的范围问题
【发布时间】:2010-09-24 13:20:23
【问题描述】:

我需要一些关于 Javascript 中范围界定问题的信息。我知道它支持词法(静态)范围,但是,它不也支持动态范围吗? 如果您对 Javascript 中的作用域有所了解,请与我分享?

谢谢

【问题讨论】:

    标签: javascript scoping


    【解决方案1】:

    我认为您感到困惑,因为 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
    

    【讨论】:

      【解决方案2】:

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

      我在上面吗?

      【讨论】:

        猜你喜欢
        • 2011-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2014-10-24
        相关资源
        最近更新 更多