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