作用域、垃圾回收机制,闭包

目录

作用域

内存泄漏、垃圾回收机制

什么是内存泄露?

如何避免内存泄露

垃圾回收机制

闭包 


作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。

作用域

作用域对程序执行的影响及作用域链的查找机制,使用闭包函数创建隔离作用域避免全局变量污染。

函数作用域

在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。

<script>
    // 什么是作用域链: 变量的查找机制
    // 大白话: 里面的函数能够看见外面的变量 ---外面看不见里面
    // 官方: 变量查找的时候: 从内往外, 就近查找

    // 全局变量a
    let a = 1;  // 全局变量 任何作用域都可以看见
    function fn() {
      // 局部变量 a ---- 在局部作用域里面声明的变量外面无法访问
      let a = 10
      function g() {
        a = 20 // 这个a 是17行 
        console.log(a);
      }
      g()
    }

    fn()//20

内存泄漏、垃圾回收机制

什么是内存泄露?

占用的内存没有被及时释放,内存泄漏积累多了就导致内存溢出。

内存泄漏一般是指变量的内存没有及时的回收,导致内存资源浪费。一般有四种情况出现内存泄露比较多。

    1. 常见的声明了一个全局变量,但是又没有用上,那么就有点浪费内存了。

    2. 定时器没清除

    3. 循环引用:A 对象里面有一个属性指向 B 对象,B 对象有一个属性指向 A 对象。互相引用

    4. 闭包:匿名函数可以访问父级作用域的变量。那在使用完之后,也要及时释放掉

如何避免内存泄露

  1. 减少不必要的全局变量,或者声明周期较长的对象,对无用的数据及时垃圾回收
  2. 避免死循环之类的
  3. 避免创建过多的对象,

垃圾回收机制

垃圾回收机制: 有两个算法:  引用计数法 + 标记清除法

 1. 引用计数法:  一个值不在被引用(引用次数为0),那么这个值就会被清除,内存就会被自动回收

 2. 标记清除法 

   为什么还会出现第二种计数法: 因为 引用计数法 有一些问题 (循环引用的问题)

闭包 

// 这个知识点 锻炼你们的编码能力
    // 什么是闭包: 内层函数 + 访问了外层函数的变量 ----- 闭包就是函数(必须有两个条件)
    // 下面代码来说, 闭包就是函数f
    // 单词: Scope(作用域): Global(全局) + Local(局部)+ Closure(闭包)

    // 用眼睛看,闭包在哪里----去浏览器的source面板,调试看一看
    // 打断点的时候,不要乱点,去函数调用的位置去打,

    // 全局作用域下面的函数 --- 全局函数
    function f() {
      // 函数f内的局部变量
      const num = 10
      // 内层函数
      function g() {
        // 在函数g的内部访问外层函数的变量num --- 为什么能访问到?
        console.log(num);
      }
      g()
    }

    f()
  </script>

闭包的作用:在函数的变量在外面是看不到的(数据的私有化),可以通过闭包来调用,访问函数内部的函数,尽量少的去定义全局变量。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值