1

スクリプト全体で、関数を呼び出していますdynamo.toolbox.add_temp_button。この例は次のとおりです。

if(page < total_pages){
    dynamo.toolbox.add_temp_button("Next Page",function(){
        dynamo.shop.enter.access(page+1,data.shop_zbid);
    });
}

この呼び出しでわかるように、2 つのパラメーターが渡されpage+1ますdata.shop_zbid。現在、これらの値は定数ではなく、スクリプトの全体的な機能により急速に変化します。

関数自体は次のとおりです。

add_temp_button : function(text,callback){
    var id = text.toLowerCase().replace(/[^A-Za-z_]/g,"_");
    callback = callback !== undefined && callback !== null ? callback : function(){};
    var but = '<button value="'+text+'" id="jqi_state0_button'+id+'" name="jqi_state0_button'+id+'" class="dynamo_temp_button">'+text+'</button>';
    $("#jqi_state0_buttonClose").before(but);
    $("#jqi_state0_button"+id).bind('click',callback);
},

これは私のスクリプトから取り除かれていることに注意してくださいdynamo.toolbox.add_temp_button

ここで、これがクロージャーを形成するかどうかを知る必要があります。つまり、add_temp_button関数に渡すパラメーターの値は固定で設定されますか?

ここでの最大の懸念は、2 番目のパラメーターですcallback。にコールバック関数として渡される関数$.bindです。pageバインドされたイベントがトリガーされたとき、 andの現在の値を使用しますcallbackか、それとも最初に渡された値を使用しますか?

ありがとうございました!

4

1 に答える 1

1

変化する

if(page < total_pages){
    dynamo.toolbox.add_temp_button("Next Page",function(){
        dynamo.shop.enter.access(page+1,data.shop_zbid);
    });
}

if(page < total_pages){
    dynamo.toolbox.add_temp_button("Next Page",(function(a,b){
        return function() { dynamo.shop.enter.access(a,b); }
    })(page+1,data.shop_zbid));
}

そして、あなたが求めているものを得るでしょう -目的の効果のためにコールバックの値page+1とローカルにする必要があります。data.shop_zbid

于 2012-08-27T18:26:06.293 に答える