JSクローズド理解

2616 ワード


 、     ? 
“  ”    :                          (       ),                。 
              ,         。            :JavaScript    function      。      ,   function          ,            “  ”。       : 

function a() { 
    var i = 0; 
    function b() { 
        alert(++i); 
    } 
    return b; 
} 
var c = a(); 
c(); 
         : 

  b     a  ; 
  a    b。 

      var c=a() ,  c         b,b      i,   c()           i  (    1)。              ,   ?    a    c     a    b,   : 


   a     b   a           ,             “  ”。 

          。  “  ”,                           ,                            。                       ,                      。                ,            ,                       ,              。             ,           ,              ,              。 

          ,                 。 

 、          ? 
    ,        a       ,    Javascript       GC    a      ,  a     b       a    。               ,       ,         ,             。 
       ,           a   ,a  i    ,      c(),i    1 alert i  。 

            ,  a       b,        。  a    ,b      a   ,   a   ,   a    b  ,    a b            (     ),  a b   GC  。(  Javascript               ) 

 、        
                a     b   ,            :       (excution context)、    (call object)、   (scope)、    (scope chain)。   a                  。 

     a   ,js       a     (scope chain)     a a   “  ”,  a       , scope chain   window  。 
     a   ,a          (excution context)。 
           ,    a    scope  , a    ,     1   scope chain。 a.scope=a     。 
               (call object)。               ,             JavaScript      。        ,        a         。  a            :a      window  。 
              arguments  ,        a       。 
       a         b       a      。     ,     b    ,     3 ,  b         b       , a    。 
  ,    a             。  a    b    c,   b           a        ,    b     a           。  b c  ,  b     a,    a       GC  。 
 、        
          。         ,  a i    b    ,            ,     i    。 
          。     ,    ,  a i         ,      c(),   i  1。 
           JS         (       )    :http://javascript.crockford.com/private.html 
        Constructor         

function Constructor(...) { 
    var that = this; 
    var membername = value; 
    function membername(...) {...} 
} 
  3            ,          。