1

同様の質問がいくつかありますが、まだ混乱しています。私の場合は、別の関数へのパラメーターとしてparamsを持つ関数であるためです。

単純なケース:

var who = 'Old IE',
dowhat  = 'eat',
mycode  = 'my code :(',
text    = 'I dont know why';

function whathappen(who, dowhat, mycode) {
    alert(who + dowhat + mycode);
}

function caller(text, func) {
    alert(text);
    func();
}

質問: のようなことをする方法はcaller(text, whathappen(who, dowhat, mycode));? 次のような匿名関数を使用するかどうかはわかりませんcaller(text, function(){ ... }(その匿名関数は2回呼び出されますか?)

ありがとうございました

4

2 に答える 2

3

引数付きで実行される関数を渡すには、ラムダを使用できます。ラムダはパラメータとして渡されますfunc

caller例: (これは、 - textwhodowhat、およびの呼び出しです。パラメーター/変数です。ラムダは、クロージャーのために、 、、およびmycodeに引き続きアクセスできます)whodowhatmycode

caller(text, function () {
    whathappen(who, dowhat, mycode);
});

「その匿名関数は 2 回呼び出されますか?」については、あなたの言いたいことが理解できれば、いいえ。次のような構文を見たことがあるかもしれません。

(function () {
    ...
})();

これは、作成直後に呼び出されるラムダです (ラムダを「呼び出す」最後の括弧に注意してください)。最初の例では、無名関数を作成して渡すだけです (関数はJavascriptのファースト クラス オブジェクトです)。

于 2013-06-22T23:56:38.090 に答える
2

proxyメソッドを使用して、特定の値で別の関数を呼び出す関数を作成できます。

caller(text, $.proxy(whathappen, this, who, dowhat, mycode));
于 2013-06-22T23:57:12.753 に答える