0

私はこのようなコードを持っています

verify_loaded_css.check (function (){
    $('#overlay').fadeOut(300, function (){
        $(this).remove(); 
    }); 
}); 

verify_loaded_css = {
    check: function (runCallback){
        if (..) {
            ..
            runCallback(); 
        } else {
            ..
        }
    }
}

どの関数が最初に実行されるかを確認するために、乱数を含む console.log を配置しました (これを行うより良い方法はありますか?)。ロジックを理解しようとしているチェック関数 (runCallback) が最初に実行されることがわかります。匿名関数がある場合、#overlay フェードアウトであるその前後にあるものは何でも自動実行すると仮定します。代わりに、最初に if ステートメントを実行するのは runCallback 関数であり、true の場合は runCallback() を再度呼び出します。そして最後に、オーバーレイをフェードアウトします。

これは、任意の無名関数が自己実行ではなく、何か別のものを宣言した場合、最初に他の場所のコードを実行することを意味しますか?

ありがとうございました

4

2 に答える 2

1

JavaScriptでは、すべてがオブジェクトです。「関数」でも

関数のインスタントを宣言できます

ヒント*下から読む。

var fadeoutCallback = function (element){
    $(element).remove(); 
}

var checkCallback = function(){
    //alert("fadeout the overlay");
    $('#overlay').fadeOut(300, fadeoutCallback); 
}

//a function that accept another instant of function
var check = function(callback){
    if(confirm("checking some condition?") == true){
        callback();
    }
}

//finally an object act as "class"
myClass = {
    myMethod: check
}

//then calling class.method
myClass.myMethod(checkCallback);
于 2012-05-02T04:00:13.250 に答える
1

これは、任意の無名関数が自己実行ではなく、何か別のものを宣言した場合、最初に他の場所のコードを実行することを意味しますか?

正しい無名関数は自己実行型ではありません。

関数は、他の言語と同様に、呼び出された順序で実行されますが、ai.farfa が言及しているように、関数はオブジェクトであり、受け渡すことができるため、コールバックの概念があります。

あなたは言う:

チェック関数 (runCallback) が最初に実行されることがわかります

しかし、より良い書き方は次のとおりです。

check(function(){/* code in here */})

したがって、 に入りcheck、その引数として定義された関数オブジェクトrunCallbackにバインドされます。

したがって、これは意味的に似ています (js がそれほど奇妙な言語でなければ、意味的には同じです)。

function myFadout() {/* code in here */};

check(myFadout);

どちらの場合も、 への引数checkは同じ一連の操作を表し、関数オブジェクトは、名前付きか名前なしかにかかわらず、便利な抽象化にすぎません。したがって、行runCallback()に到達すると、runCallbackは にバインドされているためmyFadout、発生すること意味的に と同等myFadout()です。

于 2012-05-02T04:19:02.607 に答える