Javascript 脚本中所有库之后的匿名函数

Javascript 脚本中所有库之后的匿名函数,javascript,html,Javascript,Html,只是想知道使用样式是否有什么好处:(function(){})()在脚本文件中继续执行库脚本。基本上,逻辑用于设置事件侦听器和其他初始化逻辑。 例如: (功能(){ $('div')。在('click','a',function()上{ 警报(“点击”); }); })(); v、 美国。 $('div')。在('click','a',function()上{ 警报(“点击”); }); 不,第一个只是额外的代码 现在有一种情况,第一个将阻止创建全局变量。您需要使用jQuery(do

只是想知道使用样式是否有什么好处:
(function(){
})()在脚本文件中继续执行库脚本。基本上,逻辑用于设置事件侦听器和其他初始化逻辑。

例如:


(功能(){
$('div')。在('click','a',function()上{
警报(“点击”);
});
})();
v、 美国。


$('div')。在('click','a',function()上{
警报(“点击”);
});

不,第一个只是额外的代码


现在有一种情况,第一个将阻止创建全局变量。

您需要使用jQuery(document).ready(function(){…});模型来设置事件侦听器,否则。。。好吧,jQuery还没有准备好。

在这种情况下,自动执行匿名函数的要点是避免在不需要真正的全局函数时定义全局函数或变量。由于您的示例两者都没有,因此在本例中不需要它

自动执行的匿名函数为您提供了一个私有闭包来定义您想要的任何内容,并且它与外部世界隔离。它不会引起与任何外部代码的冲突,并且外部代码不能直接访问闭包中的函数和变量


至于你关于这是否是一种标准做法的问题,那真的取决于你。我个人认为这是一个好主意,因为这样你就可以自由地定义助手函数或偶尔的全局函数,而不必触及实际的全局空间。如果您使用的是
$(document).ready(fn)
,那么您的init代码已经有了一个闭包,因此您已经在这方面做了设置。如果不是,那就看你了。我个人认为这是一个好主意,并认为将其作为一种标准做法没有什么坏处。当然,您必须记住,如果您需要一个真正的全局变量或函数,那么您必须在
窗口
对象上定义它,以便它在闭包之外可用。

对不起,这是假设您的脚本位于标记之前的底部,这使得ready函数没有必要:)是的,我知道它可以防止创建全局变量,但我只是好奇这是否是在初始化代码中使用的标准实践,或者这更适用于定义其他东西的脚本,比如帮助函数?我明白了,所以基本上如果我要跟踪一个变量,比如var clickCounter=0$('div')。在(…)上,那么最好将整件事围绕一个self-exec-anonymous func来完成?是的。正是这个想法。对您的
标准实践
问题添加了更多的注释。
<script>
(function() {
     $('div').on('click', 'a', function() {
          alert('click');
     });
})();
</script>
<script>
     $('div').on('click', 'a', function() {
          alert('click');
     });
</script>