作用域和闭包

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>闭包和作用域</title>
  </head>
  <body>
    <script>
      let aa = `LHS RHS 作用域 作用域链 词法作用域 块级作用域 闭包`;
      let a = `在变量中存储值,并且在稍后取出或修改这些值
              LHS 变量赋值 RHS 变量查询
              LHS 和 RHS 获取变量的位置就是作用域
              作用域是定义变量的区域,它决定了当前代码对变量的访问权限
              全局作用域和函数作用域
              可执行代码内部访问变量时,先在本地作用域中找,找到目标变量即返回,否则会去父级作用域中找
              一直找到全局作用域,这种嵌套机制,称为作用域链
              词法作用域,也叫静态作用域,函数被定义时,作用域已经被确定;
              创建作用域:定义函数;使用 let const;
              有权访问另一函数中变量的函数称为闭包
              应用场景:单例模式;它保证了一个类只有一个实例,实现方法是先判断实例是否存在,如果存在就直接返回
              否则就创建了再返回,好处是 避免了重复实例化带来的内存开销;柯里化,参数的复用,高阶用法;
              模仿私有属性;
              由于闭包使用过渡而导致的内存占用无法释放的情况,称之为内存泄露;
              当一块内存不再被应用程序使用的时候,由于某种原因,这块内存没有返回给操作是系统或内存池的现象;
              内存泄露可能导致程序卡顿甚至崩溃;
              内存泄露原因:全局变量的无意创建;移动DOM元素前忘记注销掉其中绑定的事件;
              排查手段:memory
              解决办法:使用严格模式;关注dom生命周期,在销毁阶段记得解绑相关事件;使用事件委托统一处理;
              避免过渡使用闭包;
              `;
    </script>
  </body>
</html>

 

posted @ 2022-05-05 14:23  苹果π  阅读(8)  评论(0编辑  收藏  举报