zoukankan      html  css  js  c++  java
  • javascript之闭包

    在内存中,分为三部分:池、栈、堆

    常量在池中  var a="ss"中的 “ss”,

    变量在栈中,比如 var a,var b

    对象在堆中,比如  function aa(){}

    整个内存相当于一个大世界,世界的名字叫window, 所有在全局中定义的变量var 和function都属于window

    每个function,就相当于一个临时开辟的小世界,整个小世界里面也有栈和堆,它定义的变量和函数都在相应的栈和堆里面。它的作用域称为内部作用域

    我们可以在内部作用域访问到外部的作用域,即全局里面的变量

    那么如果我们想在外部作用域访问到内部作用域的变量,该如何做呢,这时就要用到闭包

    代码:

    1 var a="ss"
    2 function test(){
    3    var b="s1"
    4    alert(a)  //ss
    5 }
    6 
    7 alert(b)  //出错

    使用闭包

         var a="ss"
         function test(){
             var b="s1"
             return function(){
                 alert(b)
             }
         }
    
         //获取内部变量b
         var t=test()
         t() 
        //或者
        test()()

     闭包被调用的时候,之前对象的内存空间就不会消除,因为有闭包

    闭包的作用

    1、外部作用域可以访问到内部作用域的变量

    2、保证内部作用域的变量不被污染(这一点尤其在扩展插件的时候用的多,比如(function(){插件的代码}()),这就是一个闭包)

  • 相关阅读:
    vue父子组件传值的方式
    定时任务写法
    仅仅为笔记
    consul剔除某个服务
    mybatis批量查询
    一次eureka的事故
    feign的工作原理
    JVM优化
    threadlocal应用
    秋招总结
  • 原文地址:https://www.cnblogs.com/zhaobao1830/p/6562222.html
Copyright © 2011-2022 走看看