JOSN.parse(JSON.stringify(obj))实现深拷贝的弊端
1.时间对象转换之后会变成字符串,不再是时间对象
2.对象中有 new regExp 或 Error 对象,转换之后会得到空对象
3.对象中有方法,undefined , 转换之后会丢失
4.对象中有 NaN 、infinity 和 - infinity , 转换后会变为 null
5.JSON.stringify()只能序列化对象的可枚举的自有属性,对象中的对象是由构造函数生成的,转换后会丢弃对象constructor
6、如果对象中存在循环引用的情况也是无法正确实现深拷贝。
自定义指令
vue2自定义指令生命周期
1.bind 只调用一次,指令第一次绑定到节点时调用,用这个钩子可以定义一个初始化的操作
2.inserted 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
3.update 被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
4.componentUpdated 被绑定元素所在模板完成一次更新周期时调用。
5.unbind 只调用一次,指令与元素解绑时调用。
vue3 自定义指令生命周期
created :绑定元素属性或事件监听器被应用之前调用。该指令需要附加需要在普通的 v-on 事件监听器前调用的事件监听器时,这很有用。
beforeMounted :当指令第一次绑定到元素并且在挂载父组件之前执行。 ( 替换 bind )
mounted :绑定元素的父组件被挂载之后调用。
beforeUpdate :在更新包含组件的 VNode 之前调用。
updated :在包含组件的 VNode 及其子组件的 VNode 更新后调用。( 替换 componentUpdated )
beforeUnmounted :在卸载绑定元素的父组件之前调用
unmounted :当指令与元素解除绑定且父组件已卸载时,只调用一次。 ( 替换 unbind )
模块化
模块化是指解决一个复杂问题的时候,自顶向下 逐层 将系统分割成 若干模块的过程。 对于整个系统来说,模块是可组合,可分解,可替换的单元
编程领域中的模块化,就是 遵守固定的规则 ,把一个大文件 拆成 独立并依赖的 多个小模块。
将代码进行模块化拆分的好处
1.提高了代码的 复用性
2.提高了代码的 可维护性
3.可以实现 按需加载
JavaScript 是单线程还是多线程? 可不可以实现JS多线程?
JavaScript 是单线程
可以实现多线程,通过 web worker 开启子线程。Worker 线程在后台运行,与主线程互不干扰。
new Worker('worker.js',{name:'name'})
Worker()构造函数,可以接受两个参数。第一个参数是脚本的网址(必须遵守同源政策),该参数是必需的,且只能加载 JS 脚本,否则会报错。第二个参数是配置对象,该对象可选。它的一个作用就是指定 Worker 的名称,用来区分多个 Worker 线程
想了解更多的话去阮一峰老师的博客瞧瞧 点击这里