2020.11.12

61 阅读1分钟

1.作用域链本质上是一个指向变量对象的指针列表,它只引用但不实际包含变量对象。

2.闭包因为会携带包含它的函数的作用域,因此会占用更多的内存,需要谨慎使用。

3.相当于闭包可以让一个函数包含另一个函数的作用域来实现调用其中的变量和方法。

4.将引用设为null,其将会被垃圾回收例程清除,但是全局对象不会被清除。

5.闭包的副作用:只能取得包含函数中任何变量的最后一个值。

6.函数传参是按值传递的,会传递变量的副本。

7.闭包中的this对象,一般匿名函数的执行环境具有全局性,因此this对象指向window,有时候闭包创建方式不同,this意义可能不同。所以在匿名函数中调用this,首先就应该是window里面的变量(因为它有先检索它自己的活动对象)。这个问题可以利用保存其他活动对象的this来解决,例如var that=this;

8.每个函数调用时都会自动获得两个特殊变量:this和arguments。

9.语法微妙的变换可能会影响this的值。

10.闭包在有些浏览器版本中,因为垃圾回收机制的不同,如果闭包的活动对象引用中有一个HTML元素,那么它将无法被销毁,因为出现了循环引用。解决方法是:把需要的属性存储在副本变量中,而把HTML元素设置为null,便会消除循环引用,减少HTML元素的引用数,其能够被正常回收。