r e a t e C o u n t F u n c t i o n ( n u m ) { r e t u r n f u n c t i o n ( ) { n u m + + ; / / 关键在这里,n u m 不是在内部定义的 / / 因此会将 c r e a t e C o u n t F u n c t i o n ( ) 函数的活动对象添加到它的作用域链中 / / 这样匿名函数就可以访问在 c r e a t e C o u n t F u n c t i o n ( ) 中定义的所有变量 c o n s o l e . l o g ( n u m ) ; } ; } v a r c o u n t _ a = c r e a t e C o u n t F u n c t i o n ( 0 ) ; v a r c o u n t _ b = c r e a t e C o u n t F u n c t i o n ( 1 0 ) ; f o r ( v a r i = 0 ; i < 3 ; i + + ) { c o u n t _ a ( ) ; / / 调用三次,输出保持了对同一个变量的引用,值会递增 n u m = > 1 , 2 , 3 c o u n t _ b ( ) ; } 内部匿名函数的作用域链中保持了对外部函数变量 num 的引用,在外部函数退出后,外部函数的活动 对象不会被销毁,仍然留在内存中,直到匿名函数被销毁 / / 解除对匿名函数的引用(以便释放内存) c o u n t _ a = n u l l ; c o u n t _ b = n u l l ;