仲灏小栈 仲灏小栈
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

仲灏

诚意, 正心, 格物, 致知
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《前端项目基础建设》
  • HTML&CSS

  • JavaScript&TypeScript

  • Node

  • 构建

  • Vue

  • React

  • 小程序

  • 跨端

  • Electron

  • WebGL&GIS

  • 浏览器

  • 面经

    • 数据结构和算法
    • 项目构建
    • javascript
      • 一面
      • 三面 四面
      • 二面 三面
      • Untitled
      • 初级面试题
    • 其他

    • 大前端
    • 面经
    仲灏
    2022-05-31
    目录

    javascript

    # 闭包

    https://juejin.cn/post/6844903858636849159

    示例:

    /*
     * @Author: 仲灏<izhaong@outlook.com>🌶🌶🌶
     * @Date: 2022-05-31 23:07:12
     * @LastEditTime: 2022-05-31 23:07:15
     * @LastEditors: 仲灏<izhaong@outlook.com>🌶🌶🌶
     * @Description:
     * @FilePath: /question100/src/javascript/闭包.js
     */
    function createCounter() {
        let counter = 5;
        const myFunction = function () {
            counter = counter + 1;
            return counter;
        };
        return myFunction;
    }
    const increment = createCounter();
    const c1 = increment();
    const c2 = increment();
    const c3 = increment();
    console.log('example increment', c1, c2, c3); // example increment 6 7 8
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    它是这样工作的,无论何时声明新函数并将其赋值给变量,都要存储函数定义和闭包。闭包包含在函数创建时作用域中的所有变量,它类似于背包。函数定义附带一个小背包,它的包中存储了函数定义创建时作用域中的所有变量。

    示例:

    let c = 4
    const addX = x => n => n + x
    const addThree = addX(3)
    let d = addThree(c)
    console.log('example partial application', d) //  example partial application 7
    
    1
    2
    3
    4
    5

    x 就是闭包中的变量

    总结:

    • 函数都具有闭包 (全局函数的闭包在全局作用域中, 体现不出, 在函数返回函数中尤为明显)

    简单来说就是上级作用域内变量的生命周期,因为被下级作用域内引用,而没有被释放。就导致上级作用域内的变量,等到下级作用域执行完以后才正常得到释放。

    # 精度问题

    0.1 + 0.2 !== 0.3

    • 计算机使用二进制存储数据
    • 整数转换二进制没有误差,如9 转换为二进制是 1001
    • 而小数可能无法用二进制准确表达,如0.2 转换为1.1001100...

    # 原型&原型链

    上次更新: 2022/06/05, 20:31:36
    项目构建
    一面

    ← 项目构建 一面→

    最近更新
    01
    vim日常使用记录
    04-02
    02
    滑动窗口最大值
    04-02
    03
    有效的字母异位词
    04-02
    更多文章>
    Theme by Vdoing | Copyright © 2021-2025 izhaong | github | 蜀ICP备2021031194号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式