javascriptのコールバック関数


JavaScriptでは、コールバック関数は、パラメータ(関数参照)として関数Aを別の関数Bに伝達し、この関数Bが関数Aを実行するという具体的な定義があります.関数Aをコールバック関数と呼びます.名前(関数式)がない場合は、匿名のコールバック関数と呼びます.
したがって、calbackは必ずしも非同期のためではなく、通常の同期(ブロック)のシーンでも、ある動作を実行した後に、コールバック関数を実行することが要求されるように、コールバックを使用することが多い.
1.基本的な方法
例の同期(ブロッキング)では、コールバックの例を用いて、Fnc 1コードの実行が完了した後にFnc 2を実行することを目的とする.
var func = function(callback){
    //do something.
    (callback && typeof(callback) === "function") && callback();
};
var target = function(){
    alert("callback");
};
func(target);
または匿名関数の方法
var func = function(callback){
    //do something.
    (callback && typeof(callback) === "function") && callback();
};
func(function(){
    alert(2);
});
2.高級な方法
コールの使い方
function Person(name){
    this.name = name;
}
Person.prototype.doSomething = function(callback){
    (callback && typeof(callback) === "function") && callback.call(this);
};

function foo(){
    alert(this.name);
}

var person = new Person('Joe');

person.doSomething(foo);
パラメータを伝える
function Person(name){
    this.name = name;
}
Person.prototype.doSomething = function(callback, age){
    (callback && typeof(callback) === "function") && callback.call(this, age);
};

function foo(age){
    alert("name:" + this.name + "
age:" + age); } var person = new Person('Isaac'); person.doSomething(foo, 100);
3.calbackを得るのは文字列です.
時には、calbackはパラメータかもしれません.このようにして得られたcalbackは文字列かもしれません.
このときはeval()の方法を使い、文字列をfunctionに変換します.
var func = function(callback){
    if(!callback) return;
    typeof(callback) === "string" && (callback = eval(callback));
    typeof(callback) === "function" && callback();
};
var target = function(){
    alert("target");
};
func("target");
単量体
var sin = {
    fn: function(){
        alert("sin.fn()");
    }
};
sin.pa = {
    fn: function(){
        alert("sin.pa.fn()");
    }
};
var func = function(callback){
    if(!callback) return;
    typeof(callback) === "string" && (callback = eval(callback));
    typeof(callback) === "function" && callback();
};

func("sin.fn");
func("sin.pa.fn");
これらを記録して、後で新しい状況があったら補充します.