这个问题在这里已经有一个答案:>
Why do you need to invoke an anonymous function on the same line?18
简单,为什么一些js文件(如Ember或JQuery.js)以(function(){…})()开头. ?
简单,为什么一些js文件(如Ember或JQuery.js)以(function(){…})()开头. ?
解决方法
形式的代码(function(){/ * code here * /})()被称为“立即调用的函数表达式”.它经常用于设置一个闭包,因此您可以定义变量而不污染全局范围.您可以在Ember,jQuery和几乎所有其他“插件”中找到它.污染全球范围通常是一个坏主意,但是插件必须适用于所有网站,因此特别重要的是确保它不会意外覆盖网站创建者使用的变量.
当然还有其他用途.例如,它可以用于“锚定”一个迭代变量,如下所示:
for( i=0; i<links.length; i++) { (function(i) { links[i].onclick = function() {alert(i);}; })(i); } // without the IIFE,all links would alert the value of links.length instead.
还有一些情况下,我偶尔会使用IIFE,大多数人可能会嘲笑我,例如“准时”计算:
if( (function() { var party=document.getElementById('party').children,l=party.length,i,r=0; for( i=0; i<l; i++) if( party[i].children.length > 0) r++; return r; })() == 6) { // your Party is full }
如果在跳入if语句之前计算出来,上面会好多了,所以不要像我这样做!