javascript函数中的词法范围

时间:2013-05-26 21:22:44

标签: javascript scope closures lexical-scope

以下代码段:

a = 0;

function f1() {
    a = 1;
    f2();
}

function f2() {
    return a;
}

f1();

返回undefined。

根据我的理解,函数在定义变量时可以访问变量,并在执行变量时访问这些变量的值。因此,在这种情况下,我会猜到f2可以访问全局变量'a',并读取它的修改值(1)。那么为什么它未定义?

2 个答案:

答案 0 :(得分:5)

您未在f2()函数中返回f1或其他任何内容的调用结果,因此f1正确返回undefined

答案 1 :(得分:0)

也许你所追求的是以下内容:

a = 0; // variable a defined in the global scope and set to 0

function f1() {
    a = 1; // since a is declared without var,
           // sets the value of global variable a to 1
    return f2();
}

function f2() {
    return a; // since a was not declared with var,
              // return a from the global scope
}

alert(f1()); // displays the computed value 1 of a

问候。