JS基本知识

63 阅读1分钟

闭包:就是有权访问另一个函数作用域内变量的函数

比喻说有一个函数的内部他是没有某一个变量的,那这个时候他就会去外层函数去找,但是呢一般来说,外层函数在执行完之后,是要被销毁的,但是由于作用域链的原因,即使是外层函数已经执行完了,但是此函数再次调用时,用到外层函数的变量,是不能被销毁的。

为什么说闭包容易产生内存泄漏?

当内存中出现了不能被回收的变量,这就是内存泄露,并且只要页面不关闭,变量就一直在,不能被垃圾回收机制回收或者手动清除

为什么要用闭包,而不用全局变量

因为有时候我们会希望函数执行完后,函数中的变量不被销毁。如果创建全局变量的话,他很容易被污染,同名变量,或者被一些函数修改,他类似于全局变量,可以让我们随时去用,但是不能使用全局变量代替闭包

变量提升

1)无论条件是否成立都会变量提升,全局下的 var 相当于给 window 设一个属性

2)全局下的 a不带 var,没有变量提升。JS 会向上级作用域查找,发现 window 中也没有属性 a,所以发生引用错误 ReferenceError