1 作用域
作用域是一个变量的可用范围。
JS包括两级作用域:全局作用域(window)和函数作用域。
这里需要知道另一个知识点:函数的生命周期
①定义函数时
②调用函数时
③函数调用后
2 作用域链 多级作用域串联形成的链式结构,控制着一个函数可用的所有变量:先局部,局部没有再从全局找
注意:js中没有块级作用域,for等分支循环内声明 的变量出了循环还是能用
3 闭包
作用:既重用一个变量,又保护变量不被篡改的一种编程方法
本质:外层函数的函数作用域对象,因为被内层函数引用这无法释放,就成了闭包!
如何做:
(1)外层函数包裹要保护的变量和内层函数对象;
(2)外层函数返回内层函数对象到外部
(3)使用者必须调用外层函数才能获得返回的内层函数并用变量接住
闭包形成的原因: 外层函数调用后,外层函数的作用域对象无法释放,形成了闭包
闭包的缺点:(1)比全局函数多占用一块内存空间;(2)容易造成内存泄漏
如何减少闭包缺点带来的影响:闭包不再使用时,要主动释放,fn=null;