0

私は次のコードを持っています:

var myVar = (function (window) {    

    myobj = {};

    myobj.boo = function() {
        alert('hi');
    };

    window.myVar = myobj;

})(window);

myVar.boo();

myVar.boo()を呼び出したときにアラートが返されませんか?匿名の自己実行関数を作成し、ウィンドウオブジェクトにフィードしました。その中に、メソッドが割り当てられた別のオブジェクトがあります。次に、グローバルmyVar変数をこのオブジェクトに割り当てます。これにより、myobjオブジェクトのエイリアスが提供されます。ただし、関数を呼び出すと、未定義のエラーのメソッド「boo」を呼び出せません

4

2 に答える 2

3

最初の割り当てを削除する必要があります

var myVar =

myVar値を、何も返さない関数の戻り値に置き換えるため、

または、クロージャ内から割り当てるのではなく、関数からmyVarを返す可能性が高くなります。

var myVar = (function() {
  var myobj = {};

  myobj.boo = function() {
      alert('hi');
  };

  return myobj;
})();
于 2012-12-05T16:57:05.430 に答える
1

ここでは値を使用して定義myVarしています。undefined初期化するときは、無名関数を呼び出します。そして、戻り値を保存します。ただし、関数は何も返しません。したがって、には何も割り当てられませんmyVar。追加window.myVar = myobjした場合でも、関数が終了するとオーバーライドされます。

于 2012-12-05T17:01:49.227 に答える