变量作用域
指一个变量的作用范围
全局作用域
- 全局作用域在页面打开的时候被创建,页面关闭时被销毁
- 编写在script中的变量和函数,作用域为全局,在页面的任意位置都可以访问到
- 全局作用域中有全局对象window,代表一个浏览器窗口,由浏览器创建,可以直接调用
- 全局作用于中声明的变量和函数会作为window对象的属性和方法保存
- window上的全局属性或者全局方法可以在省略 window直接调用 如window.a() 可以直接写a()
函数作用域
- 函数里可以访问函数外的变量,
- 函数外不可以访问函数里的变量
如何让函数外部读取到函数里面的变量
在函数里面用return 将需要访问的变量 return出去
闭包的作用
- 桥梁的作用,使外层函数可以读取到内层函数的变量
- 延长变量的声明周期,使变量永久存在
闭包使用时的注意点
- 滥用闭包可能导致内存泄漏,在函数调用结束的时候,把使用结束的变量置为null
- 函数外部可以改边函数内部的变量,这是个危险操作
什么是内存泄漏
浏览器都有一套自己的垃圾回收机制,当分配出去的内存不适用的时候就会回收,
内存泄漏就是,你写的代码分配了一些顽固的内存,无法进行回收,然后一直存在就会导致内存泄漏
内存泄漏的场景
- 闭包 解决方案 在函数调用结束后 将不需要使用的变量置为null
- 定时器未清除 解决方案 及时清楚定时器
- 对象的循环引用 解决方案 避免对象的循环引用
- dom泄漏(dom元素已经被删除,但是dom元素的变量引用还在没有清除,dom节点的变量还可义访问,就会造成内存泄漏) 解决方案 清楚dom变量
闭包的使用场景
- 函数的防抖
- 函数的节流