每次调用JavaScript函数的时候,都会为之创建一个新的对象,用来保存局部变量(这个局部变量里面是可以包含嵌套函数对象的),把这个对象添加至作用域链中。当函数返回的时候,就从作用域链中将这个绑定变量的对象删除。如果不存在嵌套的函数,也没有其他引用指向这个绑定对象,他就会被当做垃圾回收掉。

   如果定义了嵌套函数,每个嵌套函数都各自对应一个作用域链,并且这个作用域链指向一个变量绑定对象(嵌套函数自己的变量绑定对象)。嵌套函数的对象在外部函数中被保存了下来,他们也会和所指向的变量绑定对象一样当做垃圾回收(因为嵌套函数对象就在外部函数的变量绑定对象中)。但是,如果定义的嵌套函数被作为返回值返回或者被储存在某处的属性里,这时就会有一个外部引用指向这个嵌套函数。嵌套函数就不会被当做垃圾回收,并且它所指向的变量绑定对象也不会被当做垃圾回收(这就构成了闭包)。