自我调用匿名函数的语法

时间:2012-12-28 19:11:17

标签: javascript jquery

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

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

}));

但之后不再添加另一个SIAF?像这样:

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

}));

(function(){

});

这对我来说很奇怪,因为这只是SIAF本身在IDE中没有错误:

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

}));

(function(){

});

1 个答案:

答案 0 :(得分:9)

此:

(function() { .. });

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

此:

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

做某事,因为尾随()会导致调用该函数。 (它不会调用自己。)

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

编辑 - 术语“自我调用函数表达式”获得了一些货币。我不会涉及争议,但在我看来,它不如替代的“立即调用的函数表达式”准确,因为实际上函数不能在外部调用它。它可以包括对自己的调用,但这完全是另一回事。但是我理解这个词的精神,我认为它是无害的。