首页 > 其他分享 >学习Web全栈体系记录

学习Web全栈体系记录

时间:2024-12-19 18:10:33浏览次数:3  
标签:Web Vue console log 记录 队列 全栈 Promise const

这些概念涉及JavaScript中的核心编程思想与设计模式,下面我会详细解释每个重点和应用,并给出实际的代码示例和应用场景。

1. 高阶函数与函数抽象

重点:

  1. JavaScript的原始类型和引用类型

    • 原始类型(Primitive Types):包括 string, number, boolean, undefined, null, symbolbigint。这些类型的变量存储的是值,赋值时会创建新的副本。
    • 引用类型(Reference Types):包括 object, array, function 等。这些类型的变量存储的是内存地址,赋值时只是复制了地址,所以修改一个变量会影响其他引用它的变量。

    浅拷贝与深拷贝:

    • 浅拷贝:只复制对象的引用,嵌套对象的引用不会被复制,只是引用相同的内存地址。

      let a = { x: 1, y: [1, 2] };
      let b = { ...a };
      b.y.push(3);
      console.log(a.y);  // [1, 2, 3], a 和 b 的 y 引用了同一数组
      
    • 深拷贝:会递归地复制对象及其所有嵌套对象,完全独立于原始对象。

      let a = { x: 1, y: [1, 2] };
      let b = JSON.parse(JSON.stringify(a));
      b.y.push(3);
      console.log(a.y);  // [1, 2], a 和 b 的 y 是独立的
      

    可变性与不可变性

    • 可变性:对象的属性可以被修改。JavaScript中的对象默认是可变的。
    • 不可变性:创建一个对象后,无法改变它的状态或属性。通过使用 Object.freeze() 或 Immutable.js 等库来实现不可变对象。
  2. 纯函数与高阶函数

    • 纯函数:相同输入总是产生相同输出,并且没有副作用(不修改外部变量)。

      const add = (a, b) => a + b;
      
    • 高阶函数:接收函数作为参数或返回一个函数。常见的高阶函数有 map, filter, reduce

      const map = (arr, fn) => arr.map(fn);
      const result = map([1, 2, 3], x => x * 2);  // [2, 4, 6]
      

应用:

  1. Shallow Copy => React 性能优化
    在React中,通过避免直接修改state对象来提高性能,React使用浅拷贝来判断组件是否需要重新渲染。例如,使用 setState 时,React会通过浅比较判断对象是否发生变化。

    this.setState(prevState => ({ items: [...prevState.items, newItem] }));
    
  2. Compose => Redux Middleware
    compose 函数通常用于函数组合,使多个函数的调用更简洁。它常见于Redux中的middleware链条。

    const compose = (...fns) => (arg) => fns.reduceRight((acc, fn) => fn(acc), arg);
    const logger = store => next => action => {
      console.log('dispatching', action);
      return next(action);
    };
    const composed = compose(logger, otherMiddleware)(store);
    

2. 异步编程模式

重点:

  1. EventLoop与宏队列、微任务队列
    JavaScript的执行机制是单线程的,EventLoop是核心。代码中的异步操作(如setTimeout, Promise, async/await)会被放入不同的队列。

    • 宏任务队列(Macrotasks):setTimeout, setInterval, I/O 操作。
    • 微任务队列(Microtasks):Promise.thencatchasync/await

    执行顺序是:首先执行栈中的同步任务,然后执行微任务队列中的任务,最后执行宏任务队列中的任务。

    console.log('Start');
    setTimeout(() => console.log('Timeout'), 0);  // 宏任务
    Promise.resolve().then(() => console.log('Promise'));  // 微任务
    console.log('End');
    // 输出顺序:Start -> End -> Promise -> Timeout
    
  2. Promise和Async/Await的原理

    • Promise:用于处理异步操作,resolvereject 方法触发Promise的状态变化。
    • Async/Await:基于Promise的语法糖,简化了异步代码的写法。
      // Promise
      new Promise((resolve, reject) => setTimeout(resolve, 1000))
        .then(() => console.log('Done'));
      
      // Async/Await
      const asyncFunc = async () => {
        await new Promise(resolve => setTimeout(resolve, 1000));
        console.log('Done');
      };
      asyncFunc();
      

应用:

  1. MicroTasks => Vue.$nextTick()
    Vue.$nextTick() 是一个微任务,确保在DOM更新后执行回调。Vue在更新DOM时将异步任务放入微任务队列,$nextTick 用于在DOM渲染完成后执行。

    Vue.nextTick(() => {
      console.log('DOM updated');
    });
    
  2. 单线程 => Vue依赖跟踪
    Vue采用了单线程的事件循环机制,通过观察者模式进行依赖收集。在数据变化时,它会通过微任务队列来异步更新DOM,确保界面及时更新。

    // Vue的数据响应式机制
    const vm = new Vue({
      data: { message: 'Hello' },
      watch: {
        message(newVal, oldVal) {
          console.log('Message changed:', oldVal, '->', newVal);
        }
      }
    });
    

3. JavaScript设计模式

重点:

  1. 理解各个设计模式的使用场景
    设计模式帮助开发者解决常见的编程问题。JavaScript中常用的设计模式包括:观察者模式、订阅发布模式、中介者模式等。

  2. 观察者模式与发布订阅模式

    • 观察者模式:对象间的一种一对多的依赖关系。当一个对象的状态发生变化时,所有依赖它的对象都会收到通知。
    • 发布订阅模式:发布者发布消息,订阅者订阅消息,解耦了发布者和订阅者。常见于事件系统。

应用:

  1. 订阅发布模式 => Vuex
    Vuex 使用发布订阅模式来管理状态。组件订阅状态变化,当状态发生变化时,所有相关组件会自动更新。

    const store = new Vuex.Store({
      state: { count: 0 },
      mutations: {
        increment(state) {
          state.count++;
        }
      }
    });
    
  2. 中间件模式 => Koa
    Koa框架通过中间件模式处理HTTP请求。每个中间件负责处理请求的一个特定部分,组合起来形成完整的请求处理流程。

    const Koa = require('koa');
    const app = new Koa();
    
    app.use(async (ctx, next) => {
      console.log('Request received');
      await next();
    });
    
    app.use(async ctx => {
      ctx.body = 'Hello, World!';
    });
    
    app.listen(3000);
    

总结

这些概念和设计模式是理解JavaScript及其生态系统的基础。掌握它们能帮助你在开发中做出更清晰、可维护、性能优越的决策,特别是在现代前端框架如React、Vue和Node.js中,这些模式和思想得到了广泛应用。

标签:Web,Vue,console,log,记录,队列,全栈,Promise,const
From: https://www.cnblogs.com/adolk/p/18617731

相关文章

  • openGauss 安装记录 lite 版本
    exportLANG=zh_CN.UTF-8#创建用户useraddpostgrespasswdpostgres#12345678mkdir/opt/guassdbtar-zxvfopenGauss-Lite-5.0.2-CentOS-x86_64.tar.gz-C./guassdb/chown-Rguass:guass/opt/guassdbvim/etc/selinux/configSELINUX=disabledsetenforce0......
  • 【nginx】nginx dns缓存踩坑记录
    项目背景世界是个巨大的草台班子。这周突然在某个群里看到有个接口URL不通了。人在工位坐,锅从天上来。登录服务器进行排查:接口通过nginx,直接正向代理到外部系统某个域名。这样配置的原因是业务区域不通公网,在隔离区部署的nginx上开正向代理,从而调通公网。登录服务器,......
  • 12.19 CW 模拟赛 赛时记录
    前言考试的时候只需要管考试的策略就行了,其他的想他干嘛看题一般来说,涨信心模拟赛都不会涨信心像一位故人出的题?\(\rm{T1}\)相信自己,冲一下\(\rm{T2}\)看不懂\(\rm{T3}\)博弈\(\rm{T4}\)困难\(\rm{T1}\)机房两青轴是真的蚌埠思路转化题意,对于\(N\)条线......
  • 如何在易优CMS中实现每3条广告记录后输出一个<hr />标签?
    在易优CMS中,如果你想在每3条广告记录后输出一个<hr/>标签,可以使用mod属性来实现。mod属性允许你在每隔N行记录后输出指定的内容。以下是一个具体的示例:{eyou:advpid='1'loop='9'mod='3'}<ahref="{$field.links}"><imgalt="{$field.title}"src=......
  • WebUSB 初体验:让你的设备插上飞翔的翅膀
    "谁能想到,浏览器居然能直接管USB?科技这碗饭,越来越难吃了!"什么是WebUSB?WebUSB是一项让浏览器直接与USB设备通信的技术,旨在缩短开发者和设备间的距离。无需安装驱动,无需依赖复杂的桌面软件,直接通过JavaScript和USB设备交互。是不是听起来很酷?但别着急,这背后还有不少坑......
  • BY组态-低代码web可视化组件
      简介BY组态是集实时数据展示、动态交互等一体的全功能可视化平台。帮助物联网、工业互联网、电力能源、水利工程、智慧农业、智慧医疗、智慧城市等场景快速实现数字孪生、大屏可视化、Web组态、SCADA等解决方案。具有实时监控、多样、变化、动态交互、高效、可扩展、支持......
  • C#使用log4net和sqlite数据库记录日志
    1安装包两个包:log4netSystem.Data.SQLite第二个包也可以使用Microsoft.Data.Sqlite,查到的资料显示如果环境使用的是.NETCore或.NET5+,则建议使用Microsoft.Data.Sqlite。但是我并没有测试第二个包,可能使用上有区别。2下载Sqlite如果本地没有sqlite环境的话,需要先下......
  • JavaWeb笔记(项目案例-部门员工管理、文件上传)
    项目环境搭建资料接口文档在Day10三层架构controller:负责接受请求,处理响应service:逻辑处理,为了增强程序灵活性,方便层与层之间解耦,我们会采用面向接口的方式,还需要准备业务层的接口,mapper本身就是一个接口mapper:数据访问操作环境搭建部门实......
  • JavaWeb笔记(项目案例-登录功能、登录校验、异常处理)
    资料登录功能步骤DeptController的请求路径都是/Dept开头的EmpController的请求路径都是/Emp开头的UploadController是用来文件上传的那么LoginController就是用来登录的注意功能走的其实是emp实体类注意mapper接口中的方法名问题,login是登录,是一个业务方法,但是......
  • web组态软件开发详细流程介绍
     什么是组态软件?组态软件是一种用于创建、配置和管理各种工业控制系统的应用程序。它通过用户友好的图形界面和先进的功能,使工程师能够实时监控和控制复杂的工业过程。一、组态软件的基本概念1.1组态软件的作用组态软件在工业控制系统中起到关键的作用。它可以实时获......