js中的立即执行函数

1、什么是立即执行函数?

  • 声明一个函数,并马上调用这个匿名函数就叫做立即执行函数;也可以说立即执行函数是一种语法,让你的函数在定义以后立即执行;

2、立即执行函数的形式

(function (){
	//code
})()

3、立即执行函数的优点

  • 不必为函数命名,避免了污染全局变量

  • 立即执行函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量

  • 封装变量

    案例:

<body>
    <ul id="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <script>
       var list = document.getElementById("list");
      var li = list.children;
      for(var i = 0 ;i<li.length;i++){
        li[i].onclick=function(){
          alert(i);  // 结果总是3.而不是0,1,2
        }
      }
     </script>  
</body>

如上图所示,alert输出总是3,这是因为i是贯穿整个作用域的,而不是给每一个li分配一个i,点击事件使异步,用户一定是在for运行完了以后,才点击,此时i已经变成3了

那如何解决上述问题?

  • 可以用立即执行函数,这样会给每个li创建一个独立的作用域,函数执行时i的值从0到2,对应三个立即执行函数

          for(var i = 0 ;i<li.length;i++){
           ( function(j){
                li[j].onclick = function(){
                  alert(j);
              })(i); 把实参i赋值给形参j
            }
          }
    
  • 使用ES6的块级作用域 let来解决

          for(let i = 0 ;i<li.length;i++){
            li[i].onclick=function(){
              alert(i);  // 结果是0,1,2
            }
          }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安萌萌萌萌萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值