0

私には約束があります。それが完了したら、getContentAll メソッドを実行したいと思います。

p_numContentTotal.done(getContentAll);

また、そのメソッドにパラメータを渡したいと思います(メソッドのグローバル変数にアクセスしたいので、スクリプトのコンテキスト):

 p_numContentTotal.done(getContentAll(ctx));

しかし、これを追加すると、メソッドはすぐに実行されます。どうすればこれを回避できますか?

4

2 に答える 2

1

匿名関数でラップします。

p_numContentTotal.done(function () { getContentAll(ctx) });

ctxまたは、関数のコンテキストとして明示的にプッシュし、その中の変数thisにアクセスするために使用します。ctx

function getContentAll() {
   console.log(this); //will print your ctx variable
}
p_numContentTotal.done(getContentAll.bind(ctx));
于 2013-11-13T12:14:04.533 に答える
1

通常、名前空間を制御するために、とにかくスクリプト全体を囲む必要があります。これが完了したら、スクリプトの現在のコンテキストにアクセスするという目標の達成は既に完了しています。この「javascript クロージャー」は、Artyom が言及した「匿名機能」機能を提供するものです。

包み方はあなた次第。簡単に言えば、スクリプト全体が、オブジェクト、関数、ブロック、またはドキュメント準備完了からのコールバックである可能性があります。最終的には、これが魔法が他の方法で発生することを可能にするものです。

function main() {
    var ctx = 'current state';
    $("button").click(showContext);
    function showContext() {
        alert(ctx);
    }
}
$(main);

ここの例: http://jsfiddle.net/s6VDE/1/

ここに示されているように、これにより参照アクセスが保持されることに注意してください(必要な場合とそうでない場合があります):http://jsfiddle.net/s6VDE/5/

于 2013-11-13T12:49:21.017 に答える