javaScript 闭包

变量作用域

指一个变量的作用范围

全局作用域

  1. 全局作用域在页面打开的时候被创建,页面关闭时被销毁
  2. 编写在script中的变量和函数,作用域为全局,在页面的任意位置都可以访问到
  3. 全局作用域中有全局对象window,代表一个浏览器窗口,由浏览器创建,可以直接调用
  4. 全局作用于中声明的变量和函数会作为window对象的属性和方法保存
  5. window上的全局属性或者全局方法可以在省略 window直接调用 如window.a() 可以直接写a()

函数作用域

  1. 函数里可以访问函数外的变量,
  2. 函数外不可以访问函数里的变量

如何让函数外部读取到函数里面的变量

在函数里面用return 将需要访问的变量 return出去

闭包的作用

  1. 桥梁的作用,使外层函数可以读取到内层函数的变量
  2. 延长变量的声明周期,使变量永久存在

闭包使用时的注意点

  1. 滥用闭包可能导致内存泄漏,在函数调用结束的时候,把使用结束的变量置为null
  2. 函数外部可以改边函数内部的变量,这是个危险操作

什么是内存泄漏

浏览器都有一套自己的垃圾回收机制,当分配出去的内存不适用的时候就会回收,

内存泄漏就是,你写的代码分配了一些顽固的内存,无法进行回收,然后一直存在就会导致内存泄漏

内存泄漏的场景

  1. 闭包           解决方案     在函数调用结束后 将不需要使用的变量置为null
  2. 定时器未清除   解决方案  及时清楚定时器
  3. 对象的循环引用    解决方案 避免对象的循环引用
  4. dom泄漏(dom元素已经被删除,但是dom元素的变量引用还在没有清除,dom节点的变量还可义访问,就会造成内存泄漏) 解决方案 清楚dom变量

闭包的使用场景

  1. 函数的防抖
  2. 函数的节流
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值