2

関数を別の関数に渡し、それを使用してスコープのルックアップを減らすことをお勧めします。私はこのことについてかなり混乱しています。

入れずに・・・

function loadSuccess(a, b, c) {

};

function image(url, name, info) {

   var asset = new Image();
   asset.addEventListener("load", function(name, info) {
       return function() {
           loadSuccess(this, name, info);
       };
   }(name, info), false);
   asset.src = url;
};

image(a, b, c);

そしてそれを渡します。

function loadSuccess(a, b, c) {

};

function image(url, name, info, loadSuccess) {

   var asset = new Image();
   asset.addEventListener("load", function(name, info, func) {
       return function() {
           func(this, name, info);
       };
   }(name, info, loadSuccess), false);
   asset.src = url;
};

image(a, b, c, loadSuccess);
4

3 に答える 3

3

パフォーマンス上の利点はおそらく無視できますが、コールバックを渡すと関数がより柔軟になり、必要に応じて別の状況で別のコールバックを渡すことができます。

ただし、あなたのコードには問題があります。tt は、非同期コールバックから何かを返す意味がありません。それimageを返すのはあなたの関数ではなく、あなたが渡した内部の無名関数ですaddEventListener

これらの問題を考慮して、次のようにコードを変更します。

function loadSuccess(a, b, c) {

};

function image(url, name, info, func) {
   var asset = new Image();
   asset.addEventListener("load", function(e) {
       func(this, name, info);
   }, false);
   asset.src = url;
};

image(a, b, c, loadSuccess);

また、使用する正当な理由が見当たらないため、あなたが持っていたすぐに呼び出される関数も削除しました。

于 2013-06-22T17:48:27.793 に答える
0

最初のオプションは、画像関数が常にこの loadSucces 関数を呼び出す必要がある場合に使用することです。

2 番目のオプションは、実行するコールバック関数を選択する必要がある場合に使用します。

4 番目のパラメーターがオプションである 3 番目のオプションもあります。

function image(url, name, info, loadSuccessParameter) {
    loadSuccessParameter= loadSuccessParameter || loadSuccess;
    [...]

}

したがって、次の方法で呼び出すことができます: image(a, b, c) または次の方法: image(a, b, c, otherLoadSuccess);

お役に立てば幸いです。

于 2013-06-22T17:49:09.047 に答える