400-700-1307

【HTML5面试题】闭包是什么,有什么特性,对页面

2019-01-29 14:53

闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。

 

 闭包的特性:

 

 1.函数内再嵌套函数

 2.内部函数可以引用外层的参数和变量

 3.参数和变量不会被垃圾回收机制回收

 

 //li节点的onclick事件都能正确的弹出当前被点击的li索引

  <ul id="testUL">

     <li> index = 0</li>

     <li> index = 1</li>

     <li> index = 2</li>

     <li> index = 3</li>

 </ul>

 <script type="text/javascript">

    var nodes = document.getElementsByTagName("li");

  for(i = 0;i<nodes.length;i+= 1){

      nodes[i].onclick = (function(i){

                return function() {

                   console.log(i);

                } //不用闭包的话,值每次都是4

              })(i);

  }

 </script>

 

 

 

 执行say667(),say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在

 使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源

 因为say667()的内部函数的执行需要依赖say667()中的变量

 这是对闭包作用的非常直白的描述

 

   function say667() {

  // Local variable that ends up within closure

  var num = 666;

  var sayAlert = function() {

  alert(num);

  }

  num++;

  return sayAlert;

 }

 

  var sayAlert = say667();

  sayAlert()//执行结果应该弹出的667

开班信息

当前校区

北京校区
  • 北京校区
  • 上海校区
  • 广州校区
  • 沈阳校区
  • 杭州校区
  • 南京校区
  • 郑州校区
  • 成都校区
  • 深圳校区
  • 西安校区
  • 苏州校区
  • 深圳沙井
  • 深圳观澜
  • 深圳龙岗
  • 武汉校区
  • 西宁校区
  • 石家庄校区
  • 湖北咸宁
  • 广东惠州
  • 广东佛山

                    Copyright © 2007-2019 IT兄弟连教育 版权所有 京ICP备11018177号  京公网安备 11010802026987号