2

从我从其他主题中读到的有关问题 SIAF 或自调用匿名函数的内容只是用作容器,它限制了变量的范围(根据我所学到的)。现在,问题是,为什么我可以这样做:

$("ul>li").click((function(){

}));

但不是在它之后添加另一个 SIAF 吗?像这样:

$("ul>li").click((function(){

}));

(function(){

});

这对我来说很奇怪,因为仅 SIAF 本身就不会在 IDE 中给我任何错误:

$("ul>li").click((function(){

}));

(function(){

});
4

1 回答 1

9

这:

(function() { .. });

是一个无操作表达式,特别是它不涉及函数调用。函数对象已实例化,但未以任何方式使用。

这:

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

确实做了一些事情,因为尾随()导致函数被调用。(它不会调用自己。)

在 JavaScript 中,对函数的引用只是一个值,而函数只是一个对象(嗯,一个特殊的对象)。当对函数的引用后跟带括号的值列表时,这就是函数调用。对函数的引用来自哪里并不重要。(它来自哪里会影响函数调用的语义,但不会影响函数调用本身的基本事实。)

编辑——术语“自调用函数表达式”已经流行起来。我不会卷入争论,但在我看来,它不如替代的“立即调用的函数表达式”准确,因为实际上函数不能在外部调用自身。它可以包括对自身的调用,但这完全是另一回事。但是我理解这个词的精神,我认为它是无害的。

于 2012-12-28T19:14:19.377 回答