结论:没有区别。
下面说下立即执行函数表达式(IIFE)的原理:
function foo(){...} //这是函数定义,解释器遇到它的时候,不会运行;
foo(); //这是语句,解释器遇到语句会执行它。
这种写法是传统写法,定义和执行分开,也很好理解。那为什么还要有IIFE呢?
最主要的原因是传统的写法污染了全局命名空间(浏览器里的global对象,如window)
那function(){...}()这样写行不行呢,答案不行。function(){...}这部分只是一个声明,对于解释器来说,就好像你写了一个字符串"function(){...}",需要解析函数,比如eval()才能执行。把()直接放到声明后面是语法错误。
那如何才算正确呢,很简单,只要把声明部分变成表达式(expression)就可以了,变表达式的方法很多,最常见的方法就是用一对括号()包裹起来。
(function(){...})
还有其他的转变表达式的方式:
!function(){...}()
+function(){...}()
void function(){...}()
void function(global){
//global就是全局对象
}(this)//在浏览器里,this就是window对象
(function(){...}())是把函数表达式和执行当作语句直接执行,相当于var func = function(){...}(),func得到的是结果。
括号”()“起到的是自执行的作用。