立即执行函数

IIFE(立即执行函数)

一个在定义时就会被立即执行的函数,这不仅避免了外界访问此 IIFE 中的变量,而且又不会污染全局作用域。

(function () {
    statements
})();

为什么使用IIFE

创建一个独立的作用域
这个作用域里面的变量,外面访问不到(即避免「变量污染」)
例:

var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
  liList[i].onclick = function(){
    alert(i) // 为什么 alert 出来的总是 6,而不是 0、1、2、3、4、5
  }          //因为i贯穿整个作用域而不是每个li分配一个i
}            //用户一定是在循环结束后开始点击,则i总为6

对于这种情况,用IIFE给每一个li创造一个独立作用域:

var liList = ul.getElementsByTagName('li')
for(var i=0; i<6; i++){
  !function(ii){
    liList[ii].onclick = function(){
      alert(ii) // 0、1、2、3、4、5
    }
  }(i)
}

给函数加括号是为了通过语法检查,以此可知有多种写法

(function(){alert('我是匿名函数')} ()) // 用括号把整个表达式包起来
(function(){alert('我是匿名函数')}) () //用括号把函数包起来
!function(){alert('我是匿名函数')}() // 求反,我们不在意值是多少,只想通过语法检查。
+function(){alert('我是匿名函数')}()
-function(){alert('我是匿名函数')}()
~function(){alert('我是匿名函数')}()
void function(){alert('我是匿名函数')}()
new function(){alert('我是匿名函数')}()

你可能感兴趣的:(立即执行函数)