0

请参阅下面的 javascript。当函数以这种方式排列时,它们如何能够在不被专门调用的情况下运行。我的意思是下面的函数在没有被调用的情况下运行,我不明白如何。

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

它是这样评估的:

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

1 回答 1

11

看起来这些是函数调用的参数,即

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

这会将 的当前值j作为第一个参数传递,并将其中列出的函数作为第二个参数传递。

也就是说,为了调用该函数(警报 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);
})

这是一个有效的FIDDLE

于 2013-10-07T21:04:57.990 回答