2012-04-04 7 views
2

私は、次の操作を実行しようとしています:JavaScriptの無名関数)

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    alert(response); 
}); 

応答undefinedあり、私はそれが"hello"ことを期待します。なぜどんなアイデア?

+0

あなたは「プリントレスポンス」を書いていますが、JavaScriptはプリントされていません。 – mpm

答えて

4

call最初の引数は "this"への参照である必要があります。あなたの機能を実行したいコンテキスト "this"であること。 Call function Mozila MDN

+0

ありがとうございました。 – Justin

+1

.callの部分を省略し、this.callback( "hello")とだけ言うことができます。また、すべてのバインドを省略し、コールバックパラメータをコールバック( "hello")として直接使用することもできます。 – nnnnnn

1

あなたが書いた:

function main(callback) { 
    $.ajax('server-side', function() { 
     this.callback.call("hello"); 
    }.bind({ callback: callback }); 
} 

main(function(response) { 
    print response; 
}); 

印刷doesntのはJavaScriptで存在します。

は、あなたはあなただけのコール関数のシグネチャをチェック

callback.call(this,"hello") , 

を書くべき

間違っている、this.callback.callを書きました。

+0

実際には、bind()とコールバックを含むオブジェクトをバインドするために 'this'が必要です。 bind()を使う必要があります。なぜなら、コールバックがajaxイベントから起動するとき、パラメータ 'callback 'で渡されたものが範囲外になるからです。 – Justin

+0

@Justin - ajaxコールバックが実行されてもmain()関数のコールバックパラメータにアクセスできますが、main()はthen_で終了しますが、クロージャの魔法のためです。それを試してみてください... – nnnnnn