请参阅以下javascript。当函数以这种方式排列时,它们如何能够在没有被特定调用的情况下运行。我的意思是下面的函数在没有被调用的情况下运行,我不明白如何。
(j, function() {
alert(1);
})
它是这样评估的:
eval(s)(j, function() { catch (_) { } }
答案 0 :(得分: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