获得徽章 6
- #每天一个知识点#
为什么 Vue 中的 data 属性是一个函数而不是一个对象?
实例和组件定义 data 的区别:
vue 实例的时候定义 data 属性既可以是一个对象,也可以是一个函数;
而组件中定义 data 属性,只能是一个函数,如果为组件 data 直接定义为一个对象,会出现警告信息。
那为什么只有组件中不能定义成对象呢,在 vue 中我们定义好一个组件,最终都会通过Vue.extend() 构成组件实例,那我们就模仿组件构造函数,定义data属性,采用对象的形式创建两个组件实例:
const componentA = new Component()
const componentB = new Component()
想一下,修改 componentA 组件中属性的值,componentB 中的值也会发生改变。
这就是对象共用了同一个内存地址,componentA 修改的内容,同样对 componentB 产生了影响。
如果我们采用函数的形式,就不会出现这种情况。
简单来说,就是在根实例对象 data 可以是对象也可以是函数(根实例是单例),不会产生数据污染情况。
组件实例对象 data 必须为函数,目的是为了防止多个组件实例对象之间共用一个 data,产生数据污染。展开2点赞 - #每天一个知识点#
vue2 和 vue3 中 diff 计算区别:
vue2 diff 算法就是进行虚拟节点对比,并返回一个 patch 对象,用来存储两个节点不同的地方,最后用 patch 记录的消息去局部更新 Dom。 vue2 diff 算法会比较每一个vnode,而对于一些不参与更新的元素,进行比较是有点消耗性能的。
vue3 diff 算法在初始化的时候会给每个虚拟节点添加一个 patchFlags,patchFlags 就是优化的标识。 只会比较 patchFlags 发生变化的 vnode,进行更新视图,对于没有变化的元素做静态标记,在渲染的时候直接复用。展开赞过21 - #每天一个知识点#
Promise then 第二个参数和catch的区别是什么?
Promise 的 then 方法和 catch 方法都是用于处理 Promise 的 rejected 状态的情况。它们的区别在于:
1. then 方法的第二个参数
如果 Promise 的状态变为 rejected,then 方法的第二个参数会被调用。该参数是一个函数,可以接收一个参数,即 Promise 返回的错误信息。
2. catch 方法
catch 方法相当于 then 方法的第二个参数,也是用于处理 Promise 的 rejected 状态的情况。不同之处在于,catch 方法可以链式调用,而不需要在每次调用 then 方法时都传递第二个参数。展开赞过32 - #每天一个知识点#
canvas 和 webgl 有什么区别?
渲染方式:
Canvas:Canvas 使用2D渲染上下文来绘制图形和图像。它基于像素的绘图系统,通过JavaScript脚本控制渲染过程。
WebGL:WebGL 是基于OpenGL ES标准的JavaScript API,它可以利用GPU进行硬件加速的3D图形渲染。WebGL 使用着色器编程,允许更复杂和高性能的图形渲染。
功能和复杂性:
Canvas:Canvas 提供了简单的2D图形绘制功能,包括绘制基本形状、路径、文本和图像等。它适用于绘制简单的图形和动画。
WebGL:WebGL 提供了强大的3D图形渲染功能,包括高级的着色器编程、纹理映射、深度缓冲、光照效果等。它适用于创建复杂的3D图形、游戏和交互式可视化。
编程难度:
Canvas:使用 Canvas 进行2D图形绘制相对简单,仅需基本的 JavaScript 知识和绘图API的了解即可开始绘制。
WebGL:WebGL 的编程相对复杂,需要了解着色器编程和3D图形渲染的概念。使用 WebGL 需要掌握OpenGL ES或类似的图形编程知识。展开评论点赞 - #每天一个知识点#
es5 中的类和 es6 中的 class 的区别:
1. class 类必须 new 调用,不能直接执行。
2. class 类不存在变量提升
3. class 类无法遍历它实例原型链上的属性和方法
4. new.target 属性(es6 为 new 命令引入了一个 new.target 属性,它会返回 new 命令作用于的那个构造函数)
5. class 类有 static 静态方法展开评论点赞
,去趟医院太贵了