2016-06-26 6 views
0

私はコールバックで非常に奇妙な問題があり、​​です。 1回は正常に実行されますが、2度目はコールバックがNumberになります。 なぜtypeofコールバック番号になるのですか?

function TEST() { 
 
    this.michou = "jean"; 
 
} 
 

 
TEST.prototype.talk = function(fn) { 
 
    window.requestAnimationFrame(this.talk.bind(this)); 
 
    alert(typeof fn); //type of callback 
 
    fn(); 
 
}; 
 

 
var jean = new TEST(); 
 

 
jean.talk(function() { 
 
    alert("hello"); 
 
});

あなたはこのコードをしようとした場合、アラート「機能」「こんにちは」と「番号」「数」に表示されます

。タイプに「番号」が表示されるのはなぜですか callback?あなたの .talk()関数はアニメーションフレームで呼び出された場合( 何かが渡されたものの、下記参照)

答えて

1

、渡された何fn値はありません。

TEST.prototype.talk = function(fn) { 
    window.requestAnimationFrame(this.talk.bind(this, fn)); 
    alert(typeof fn); //type of callback 
    fn(); 
}; 

あなたがオブジェクト参照に機能をバインドするときは、2番目のパラメータとしてfnを渡すと、関数は適切なthisの両方で呼び出されます:あなたは、コードを変更した場合、あなたはそれを修正することができますパラメータ。

コードに表示される数値は、ブラウザがアニメーションフレームコールバックに渡す高解像度のタイムスタンプです。上記のようにコードが変更されても、最初のコードではなく2番目のパラメータになります。

関連する問題