0

我曾尝试阅读有关该主题的其他帖子,但还没有运气。在下面的这段代码中,为什么 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".
4

3 回答 3

8

yourf2()仅在f1()范围内定义。你不能全局调用它

于 2012-12-14T18:56:41.960 回答
1

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

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

         document.writeln(name);

         return f2

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

      } 

var f2 = f1();
f2();
于 2012-12-14T19:04:58.477 回答
0

您需要阅读 Javascript 闭包。

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

function f1()
{
   var name = "david";
   return function()
   {
      console.log(name);
   }
}
var f2 = f1();
f2();
于 2012-12-14T18:59:23.493 回答