zoukankan      html  css  js  c++  java
  • 什么是闭包(closure),为什么要用它?

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

    闭包的特性

    1.函数内再嵌套函数
    2.内部函数可以引用外层的参数和变量
    3.参数和变量不会被垃圾回收机制回收

    HTML:

    <!-- li节点的onclick事件都能正确的弹出当前被点击的li索引 -->
    <
    ul id="testUL">   <li> index = 0</li>   <li> index = 1</li>   <li> index = 2</li>   <li> index = 3</li> </ul>

    JS:

    <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>


    然后我们看看下面的一段代码,这是对闭包作用的非常直白的描述:

    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

    执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在
    使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源
    因为say667()的内部函数的执行需要依赖say667()中的变量

  • 相关阅读:
    Java面试——VUE2&VUE3概览
    Golang 面试笔录
    数据科学完整流程概述
    周志华 机器学习 西瓜书 主要符号表
    数据分析师的发展方向?
    404 GET /nbextensions/jupyter-js-widgets/extension.js
    如何使用Conda源快速安装PyTorch?
    美化React组件之CSS Modules
    react如何全局配置sass
    nuxt api缓存,组件缓存,页面缓存
  • 原文地址:https://www.cnblogs.com/lqzweb/p/6215736.html
Copyright © 2011-2022 走看看