跳至主要內容

闭包

yyshino大约 1 分钟

闭包

闭包产生:内部函数对它上一层函数中的变量存在引用,这就导致之前变量的引用一直存在的没有消失的,这种情况下就产生了闭包。这种情况下由于它的引用一直存在没有被解除(JS垃圾回收机制回收)就会造成内存泄露

作用定义:闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用, 子函数所在的父函数的作用域不会被释放。

原理:作用域链,当前作用域链可以访问上级作用域中的变量

【三大特性】

  1. 闭包可以访问当前函数以外的变量
  2. 即使外部函数已经返回,闭包仍能访问外部函数定义的变量
  3. 闭包可以更新外部变量的值

【解决的问题】

保存变量,保护变量

【带来的问题】

内存泄漏;

【闭包的应用】

  • 防抖节流
  • 能够模仿块级作用域
  • 能够实现柯里化
  • 在构造函数中定义特权方法
  • Vue中数据响应式Observer中使用闭包等