javascriptのコールバック関数
2425 ワード
JavaScriptでは、コールバック関数は、パラメータ(関数参照)として関数Aを別の関数Bに伝達し、この関数Bが関数Aを実行するという具体的な定義があります.関数Aをコールバック関数と呼びます.名前(関数式)がない場合は、匿名のコールバック関数と呼びます.
したがって、calbackは必ずしも非同期のためではなく、通常の同期(ブロック)のシーンでも、ある動作を実行した後に、コールバック関数を実行することが要求されるように、コールバックを使用することが多い.
1.基本的な方法
例の同期(ブロッキング)では、コールバックの例を用いて、Fnc 1コードの実行が完了した後にFnc 2を実行することを目的とする.
コールの使い方
時には、calbackはパラメータかもしれません.このようにして得られたcalbackは文字列かもしれません.
このときはeval()の方法を使い、文字列をfunctionに変換します.
したがって、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");
これらを記録して、後で新しい状況があったら補充します.