-1
function setupSomeGlobals() {
    // Local variable that ends up within closure

    var num = 666;
    // Store some references to functions as global variables
    gAlertNumber = function() {console.log(1); alert(num); }
    gIncreaseNumber = function() { num++; }
    gSetNumber = function(x) { num = x; }
}

ここで gAlertNumber メソッドにアクセスするにはどうすればよいですか?

更新:このコードは、 JavaScript クロージャーはどのように機能しますか?に関する回答の例 4です。

4

4 に答える 4

0

ここに例があります、

(function() {
   console.log(1);
   // Local variable that ends up within closure
   var num = 666;
   var sayAlert = function() { console.log(num); }
   num++;
   return sayAlert();
})();

これは、定義の直後に呼び出されます。

だからあなたのコードで、

function setupSomeGlobals() {

  var num = 666;
  // Store some references to functions as global variables
  gAlertNumber = function() {console.log(1); alert(num); }
  gIncreaseNumber = function() { num++; }
  gSetNumber = function(x) { num = x; }

  gAlertNumber();

}
setupSomeGlobals();

ここでは、親関数gAlertNumber()内で子関数を呼び出すことができsetupSomeGlobals()ますが、親関数の外では子関数にアクセスできません。

ただし、親関数を呼び出した後にこれを呼び出すことができます。つまり、gAlertNumber()内部の親関数を呼び出さないでください。親のように呼び出した後、それを呼び出します

function setupSomeGlobals() {
    // Local variable that ends up within closure
    var num = 666;
    // Store some references to functions as global variables
    gAlertNumber = function() {console.log(1); alert(num); }
    gIncreaseNumber = function() { num++; }
    gSetNumber = function(x) { num = x; }
}

setupSomeGlobals();
gAlertNumber();
于 2013-10-11T12:58:12.130 に答える
0

3 つのメソッドを含む setSomeGlobals() からオブジェクトを返します。このオブジェクトを介して、目的の関数にアクセスし、num を操作してその状態を維持できますが、num に直接アクセスすることはできません。これは、クロージャーのアプリケーションであるモジュール パターンとして知られています。

于 2013-10-11T13:20:14.757 に答える