JavaScript闭包

闭包

变量作用域
根据作用域不同分为:全局变量和局部变量
1.函数内部可以使用全局变量
2.函数外部不可以使用局部变量
3.当函数执行完毕,本作用域内的局部变量会销毁
什么是闭包
闭包指有权访问另一个函数作用域中变量的函数。--JavaScript高级程序设计
可以理解为:一个作用域可以访问另外一个函数内部的局部变量。

function fn(){
  var num = 10;
  function fun(){
    console.log(num )
  }
  fun();
}
fn();//fn 为闭包函数

闭包的作用
fn外面的作用域可以访问fn内部的局部变量

function fn(){
  var num = 10;
  return function (){
    console.log(num )
  }
}
var f = fn();
f();

闭包的作用是延伸了变量的作用范围

例子

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
            <ul class="nav"> 
                <li>苹果</li>
                <li>梨</li>
                <li>香蕉</li>
                  <li>西瓜</li>
             </ul>
            <script>
                //获取li标签的索引号
                //1.动态添加属性
                var lis = document.querySelector('.nav').querySelectorAll('li');
                  for(var i =0; i<lis.length;i++){
                        lis[i].index = i;
                      lis[i].onclick = function(){
                          console.log(this.index);
                      }
                   }
                  //2.利用闭包的方式
                  for(var i =0; i<lis.length;i++){
                    (function(i){
                        lis[i].onclick = function(){
                          console.log(i);
                        } 
                     })(i);
                  }
             </script>
    </body>
</html>

闭包的缺点是会占用内存,造成内存泄漏。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。