是什么?
- 立即执行函数就是
- 声明一个匿名函数
- 马上调用这个匿名函数 ```javascript ( function(){alert(‘匿名函数’)} )()
// 1. function(){alert(‘匿名函数’)} 声明一个匿名函数 // 2. ( function(){alert(‘匿名函数’)} ) 用括号包起来 // 3. ( function(){alert(‘匿名函数’)} )() 调用他
- 一定要用括号包起来,为了兼容 JS 的语法。否则会报错<a name="RT3wu"></a>## 什么用?- 立即执行函数作用是- 创建一个独立的作用域。- 这个作用域里面的变量,外面访问不到(可以避免「变量污染」)。```javascriptvar liList = ul.getElementsByTagName('li')for(var i=0; i<6; i++){ //进行 for 循环liList[i].onclick = function(){alert(i) // 为什么 alert 出来的总是 6,而不是 0、1、2、3、4、5}}
为什么 alert 出来的总是 6,而不是 0、1、2、3、4、5 ?
立即执行函数给每个 li 创造一个独立作用域 , 可以让 alert 出来的是 0、1、2、3、4、5 ```javascript 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) // 传入参数 i ,然后调用那个匿名函数
} ```
- 在立即执行函数执行的时候,i 的值被赋值给 ii,此后 ii 的值一直不变。
- i 的值从 0 变化到 5,对应 6 个立即执行函数
- 这 6 个立即执行函数里面的 ii 「分别」是 0、1、2、3、4、5。
