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

yourはスコープf2()内でのみ定義されます。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 Closures を読む必要があります。

これは、内部関数で外部関数から変数にアクセスする方法を示すスニペットのバージョンです (内部関数をグローバルに呼び出したい場合)。

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