JS作用域链描述为一个对象列表,不是绑定的栈。
1每次调用JS函数的时候,都会为之创建一个新的对象用来保存局部变量,把这个对象添加到作用域链中,当函数返回时,就从作用域链中将这个绑定变量的对象删除。
2如果不存在嵌套的函数,也没有其他引用指向这个 绑定的对象,他会被当作垃圾回收掉。
3如果定义了嵌套函数,每个嵌套函数都各自对应一个作用域链,并且这个作用域链指向一个变量绑定的对象。
4如果这些嵌套函数对象对应在外部函数中保存下来,那么他们也会和所指向的变量绑定对象一样当作垃圾回收。
5但如果这个函数定义嵌套函数,并且将它作为返回值返回或者存储在某处的属性里,这时就会有一个外部引用指向这个嵌套函数,它就不会当作垃圾处理了,并且他绑定对象也不会被当做垃圾回收(如果使用不慎,闭包很容易造成循环引用,当dom对象与JS对象之间出现循环引用需要格外小心,在某些浏览器会造成内存泄漏~~)
文章标题
最新推荐文章于 2023-10-19 15:03:50 发布