0

以下の JavaScript を参照してください。関数がこのように配置されている場合、具体的に呼び出されなくても実行できるのはどうしてですか。つまり、以下の関数は呼び出されずに実行され、その方法がわかりません。

(j, function() {
alert(1);
})

次のように評価されます。

eval(s)(j, function() { catch (_) { } } 
4

1 に答える 1

11

これらは関数呼び出しの引数のようです。つまり

foo(j, function() {
   alert(1);
})

これにより、現在の値がj最初の引数として渡され、そこにリストされている関数が 2 番目の引数として渡されます。

とはいえ、その関数 (アラート 1 の関数) をfoo呼び出すには、手動で呼び出す必要があります。の線に沿った何か

function foo(j, f){
    f();
}

編集

したがって、質問の編集によると、関数を直接参照する代わりに、 eval ステートメントからフェッチしていることを除いて、上記の内容はあまり正しくないようです。

このようなもの:

function foo(j, f){
     f();
}
var s = "foo";
var j = 0;
eval(s)(j, function() {
    alert(1);
})

ここに動作するフィドルがあります

于 2013-10-07T21:04:57.990 に答える