6

一、闭包的概念

闭包是指一个函数能够访问其函数外部作用域中的变量。
JavaScript闭包是函数内部的子函数能读取局部变量

二、闭包的特点

  1. 函数里面嵌套函数
  2. 内部函数能访问外部函数的变量
  3. 定义的参数和变量不会回收

三、JavaScript闭包的前提

  • 先明白什么是全局变量和局部变量
  • JavaScript中声明变量格式:var(关键字)+变量名(标识符)。

全局变量:

  1. 不在函数function内部用var关键字声明如:
    var text; var text=10;
  2. 在函数function内部没有使用var关键字声明却直接赋值如:

function show(){
text=10;
}

局部变量:在函数function内部使用var关键字声明并赋值如:
function show(){
var text=10;
}

四、JavaScript闭包的用途

简单举1个小例子
创作一个列表鼠标点击时使其一行背景色变为红色,点击另一行时上次点击的变为原样。
首先创造列表

     <ul>
         <li>1</li>
         <li>2</li>
         <li>3</li>
         <li>4</li>
         <li>5</li>
     </ul>    

使用JavaScript闭包,先取出所有的li,然后用for循环找到一个个li并用function函数封装并给其添加样式,在函数内部for循环清除上一次点击的背景色。

    <script type="text/javascript">
          var lilist=document.getElementsByTagName('li');
          // 取出所有的li
        for (var i=0;i<lilist.length;i++){
            lilist[i].onclick=(function(i){
                return function(){
                    console.log(i);
                    for(var j = 0; j < lilist.length; j++) {
                        lilist[j].style.backgroundColor = "";
                    }
                    this.style.backgroundColor="red";
                }
            })(i);
        }
    </script>

由上面可以看出闭包的两个用途:一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

五、JavaScript闭包的缺点及其使用建议

闭包有一个严重的缺点:内存浪费问题。不仅仅因为它常驻内存,更主要的是,对闭包的使用不当会造成无效内存的产生。
建议:在退出函数之前,将不使用的局部变量全部删除。


无语的人
18 声望0 粉丝