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(){插件的代码}()),这就是一个闭包)

原文地址:https://www.cnblogs.com/zhaobao1830/p/6562222.html