JavaScript中的局部和全局变量范围

时间:2012-12-14 18:54:19

标签: javascript jquery html

我曾尝试阅读有关该主题的其他帖子但尚无运气。在下面的代码中,为什么f2()不能访问f1()中定义的var。 var“name”不是函数f2()的全局吗?不应该f2()看到var“name”?

    function f1() {
     var name = "david";
     function f2() {
        document.writeln(name);
     }
     document.writeln(name);
  }                   

  f2(); // does not write out "david".

3 个答案:

答案 0 :(得分:8)

您的f2()仅在f1()范围内定义。你无法全球称呼它

答案 1 :(得分:1)

Javascript是功能级别的范围,而不是块范围。函数可以访问它的父级函数变量,但不能访问其中函数中定义的变量。您可以从f1返回f2并以此方式调用

     function f1() {
         var name = "david";

         document.writeln(name);

         return f2

         function f2() {
            document.writeln(name);
         }

      } 

var f2 = f1();
f2();

答案 2 :(得分:0)

您需要阅读Javascript Closures。

以下是您的代码段的一个版本,它演示了如何在内部函数中从外部函数访问变量(如果您想全局调用内部函数)。

function f1()
{
   var name = "david";
   return function()
   {
      console.log(name);
   }
}
var f2 = f1();
f2();