2011-01-24 13 views
1

は、私は以下のコードを実行しているときに、JavaScriptのエラーを得ました。A JavaScript言語の問題

しかし、私はエラーが発生しました。どうして?

ありがとうございました!

答えて

2

aaafn()の範囲外であるために動作しません。何を混乱することができることは

(function() { 
    alert(aaa); // 'BBB' 
})(); 

が動作しているが、fn()ではないということです。 "BBB"はfoo2の中で呼び出されたと定義されているので、alert(aaa)aaaは同じスコープにあり、うまく動作します。 fn()にパラメータとして渡すaaa

var aaa = 'BBB'; 

var fn = function() { 
    return function() { 
    alert(aaa); 
    }; 
}; 

var foo2 = function() { 
    (function() { 
     alert(aaa); // 'BBB' 
    })(); 
    fn(); 
}; 
  • :アッパー範囲内

    1. が宣言aaa:あなたは2つのオプションがあり、ことを考えると

      var fn = function (aaa) { 
          return function() { 
          alert(aaa); 
          }; 
      }; 
      
      var foo2 = function() { 
          var aaa = 'BBB'; 
          (function() { 
           alert(aaa); // 'BBB' 
          })(); 
          fn(aaa); 
      }; 
      
    私はこれが役に立てば幸い

    http://www.digital-web.com/articles/scope_in_javascript/

    は、ここではJavaScriptスコープについての記事です。

  • +0

    あなたの返事をありがとう。 :) – weilou

    3

    fn機能が動作しているときは、foo2機能でaaaが見つかるはずです。

    いいえ、そうしてはいけません。 aaaはローカル変数としてfoo2に宣言されており、fnの内部ではアクセスできません。何が違うと思いますか?私が見たプログラミング言語はそのように振る舞いませんでした。

    //var aaa = 'AAA';行のコメントを外しても、その後fnの警告はもちろん「BBB」ではなく「AAA」と表示されます。

    +0

    ありがとうございます。 :) – weilou

    1

    var aaafoo2に指定したので、その範囲はfoo2に制限されています。 fnにはアクセスできません。

    var aaaを両方の関数の外に宣言するか、パラメータとしてfnに渡します。

    +0

    お返事ありがとうございます。 :) – weilou