值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。
引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)。
原数组变化
原数组不变并生成新数组
含义:定义在一个函数内部的函数,并且能被被函数外部所引用。
函数A被定义在内部的函数B引用时,函数A被函数B闭包,当函数A被执行完时,函数A的作用域不会被释放。
本质:函数外部和内部连接的桥梁。
优点:可以实现对象的私有属性和私有方法。让局部变量持久化保存,防止变量污染。
变量污染:变量被重复定义,后面的会覆盖前面的。
缺点:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。
内存泄漏:程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
解决:在函数执行完,将不使用的局部变量删除:局部变量=null。
**栈:**栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间.
堆:动态分配空间,大小不定,也不会释放,存放引用数据类型,指哪些可能由多个值构成的对象,保存在堆内存中,包含引用类型的变量本身,实际上保存的不是变量本身,而是指向该对象的指针。
JavaScript是单线程语言,分为同步任务和异步任务
同步任务:直接进入执行栈,在主线程上排队执行的任务,只有前一个任务执行完毕才会执行下一个任务
异步任务:不进入主线程,而进入任务队列的任务,只有等主线程任务全部执行完毕,任务队列才会进入主线程执行
而异步任务分为宏任务和微任务,其主要区分有:
执行顺序:开始新的宏任务 => 宏任务执行 => 宏任务执行完毕 => 判断有没有可执行的微任务
有可执行微任务 => 执行所有微任务 => 微任务执行完毕 => 开始新的宏任务
没有可执行微任务 => 执行新的宏任务
由此可见:JavaScript的执行机制是Event Loop(事件循环)
共性:
区别:
用人话说:多个值影响一个值,用计算属性;一个值影响多个值,用watch
diff算法就是虚拟节点之间进行对比,并返回一个patch对象用来存储两个节点不同的地方,然后通过path记录的消息去局部更新DOM
在Vue中,diff作用于虚拟 dom 渲染成真实 dom 的新旧 VNode 节点比较
简单来说:diff的过程就是重复调用名为patch的函数,比较新旧节点,一边比较一边给真实的DOM打补丁
diff算法步骤:
diff特点:
源码:
function sameVnode (a, b) {
return (
a.key === b.key && a.tag === b.tag //就地复用
)
}
也就是说,判断两个节点是否为同一个节点(也就是是否可复用),标准是key相同且tag相同。
Vuex 是为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式发生变化。
store中主要有五个对象:state、mutations、actions、getters、modules
src目录下新建filters/index.js
模块化思想,不同模块过滤器放到不同文件夹下
filters目录下新建formatLongText.js
// 过滤器
export default (val) => {
if (val.length > 10) return val.slice(0, 10) +'...'
return val
}
filters/index.js引入过滤器并导出
import formatLongText from './formatLongText'
export {
formatLongText
}
全局使用:
main.js注册过滤器
import * as filters from '@/filters'
Object.keys(filters).forEach(key =>{
Vue.filter(key,filters[key])
})
局部使用:
import {formartLong} from '@/filters'
// data同级新建filters对象
filters:{formartLong}
使用
<a-checkbox @change="(e)=>{handleChangeCheckBoxVal(e,item.id)}">{{ item.info | formatLongText }}a-checkbox>
component: () => import('../views/Login')
terser-webpack-plugin
插件移除console语句webpack.config.js
中的externals
对象下声明需要使用CDN的资源,并在index.html
中引入CDN连接,减少包的体积webpack-bundle-analyzer analyzer
图片压缩工具,减少图片大小package.json
定义脚本,并在.env
文件配置baseURL