1

data.jsファイルには次のものがあります。

(function () {

   data() 

   function runThisWhenDataIsFinished() {

        console.log("Works!"); 

   }


})();

app.jsファイルに私は持っています

function data() {

    console.log("Im in the data function");

    runThisWhenDataIsFinished();

}

data()を呼び出すと、「Im in the data function」というメッセージが表示され、runThisWhenDataIsFinished()メソッドを呼び出そうとすると、エラーが発生します。runThisWhenDataIsFinished()メソッドが定義されていません。

では、app.jsからdata.jsのrunThisWhenDataIsFinishedメソッドにアクセスするにはどうすればよいですか?

よろしくお願いします

4

3 に答える 3

2

runThisWhenDataIsFinished字句スコープが(その親関数に対して)であるため、これを行うことはできません。そのスコープ外でアクセスできるようにする場合は、ある種のグローバル名前空間を使用する必要があります。

http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depthを参照してください

于 2013-02-22T13:42:15.767 に答える
2

これらが異なるファイルにあることはそれほど多くありませんが、それrunThisWhenDataIsFinished()は無名関数にあります。data.jsこれを関数の外に移動すると、呼び出しを行う前にロードされている限り、data()正しく実行されます。

于 2013-02-22T13:42:31.730 に答える
0

いくつかのコメント:

  • まず、 「data()」関数を呼び出した後に「runThisWhenDataIsFinished」を定義します。したがって、関数が定義される方法はありません

  • 関数を定義した後に "data()" を呼び出すと、機能しません。別の方法で説明されているように、無名関数のスコープでのみ定義されるためです。

うまくいくものがありますが、それをしないでください:

function data() {

  console.log("Im in the data function");

  // The 'globalRunThisWhenDataIsFinished' function is no defined in this scope, 
  // so it will only be called if it exists as a *global* variable
  globalRunThisWhenDataIsFinished();

}

(function () {

   // When calling the anonymous function like you do, 
   // 'this' is the Window object, so you can add "global" variables
   // like this. However you probably DO NOT WANT TO DO THAT
   this.globalRunThisWhenDataIsFinished = function() {

      console.log("Works!"); 

   }

   data();

})(); 

指摘したように、Module パターンを見て、本当にやりたいことを理解することをお勧めします。

于 2013-02-22T13:57:09.493 に答える