以下の JavaScript を参照してください。関数がこのように配置されている場合、具体的に呼び出されなくても実行できるのはどうしてですか。つまり、以下の関数は呼び出されずに実行され、その方法がわかりません。
(j, function() {
alert(1);
})
次のように評価されます。
eval(s)(j, function() { catch (_) { } }
以下の JavaScript を参照してください。関数がこのように配置されている場合、具体的に呼び出されなくても実行できるのはどうしてですか。つまり、以下の関数は呼び出されずに実行され、その方法がわかりません。
(j, function() {
alert(1);
})
次のように評価されます。
eval(s)(j, function() { catch (_) { } }
これらは関数呼び出しの引数のようです。つまり
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);
})
ここに動作するフィドルがあります