从我从其他主题中读到的有关使用SIAF或自我调用匿名函数的内容只是作为一个容器,它限制了变量的范围(从我学到的内容)。现在,问题是,为什么我可以这样做:
$("ul>li").click((function(){
}));
但之后不再添加另一个SIAF?像这样:
$("ul>li").click((function(){
}));
(function(){
});
这对我来说很奇怪,因为这只是SIAF本身在IDE中没有错误:
$("ul>li").click((function(){
}));
(function(){
});
答案 0 :(得分:9)
此:
(function() { .. });
是一个无操作表达式,特别是它不涉及函数调用。函数对象是实例化的,但它没有以任何方式使用。
此:
(function() { ... })();
做做某事,因为尾随()
会导致调用该函数。 (它不会调用自己。)
在JavaScript中,对函数的引用只是一个值,而函数只是一个对象(嗯,一个特殊的对象)。当对函数的引用后跟带括号的值列表时,那就是函数调用。函数的引用来自何处并不重要。 (它来自哪里可以影响函数调用的语义,但不影响函数调用本身的基本事实。)
编辑 - 术语“自我调用函数表达式”获得了一些货币。我不会涉及争议,但在我看来,它不如替代的“立即调用的函数表达式”准确,因为实际上函数不能在外部调用它。它可以包括对自己的调用,但这完全是另一回事。但是我理解这个词的精神,我认为它是无害的。