js立即执行函数(function ( ){})( ) 与 (function ( ){}( )) 区别

结论:没有区别。


下面说下立即执行函数表达式(IIFE)的原理:

function foo(){...} //这是函数定义,解释器遇到它的时候,不会运行;
foo(); //这是语句,解释器遇到语句会执行它。
这种写法是传统写法,定义和执行分开,也很好理解。那为什么还要有IIFE呢?

最主要的原因是传统的写法污染了全局命名空间(浏览器里的global对象,如window)


function(){...}()这样写行不行呢,答案不行。function(){...}这部分只是一个声明,对于解释器来说,就好像你写了一个字符串"function(){...}",需要解析函数,比如eval()才能执行。把()直接放到声明后面是语法错误。


那如何才算正确呢,很简单,只要把声明部分变成表达式(expression)就可以了,变表达式的方法很多,最常见的方法就是用一对括号()包裹起来。

扫描二维码关注公众号,回复: 1046439 查看本文章
(function(){...})
还有其他的转变表达式的方式:

!function(){...}()
+function(){...}()
void function(){...}()


所谓不会污染全局对象,是因为IIFE创建了一个新的函数作用域,你的业务逻辑代码被封装在其中,自然不会碰触到全局对象,如果需要全局对象,那就pass给IIFE:

void function(global){
//global就是全局对象
}(this)//在浏览器里,this就是window对象


(function(){...})()是把函数当作表达式解析,然后执行解析后的函数,相当于  var func = function(){...}; func(); func得到的是函数;

(function(){...}())是把函数表达式和执行当作语句直接执行,相当于var func = function(){...}(),func得到的是结果。

括号”()“起到的是自执行的作用。








猜你喜欢

转载自blog.csdn.net/inhumming/article/details/78974893
今日推荐