1.v-if和v-for的优先级哪个更高,同时应用时如何正确处理?

v-for的优先级更高,在每次渲染时,都会先循环再判断,在源码中,能够看到两者的解决逻辑,先for再if,若是同时应用,最好在v-for外层写一层template,后行判断,再进行循环。

2.Vue组件中的data为什么必须是个函数,而根实例时则没有该限度?

次要是为了避免数据净化,组件有可能会是多个,也就是说多个Vue组件共用一个data,如果这时data是对象的话,那么一个组件的数据变更会影响到所有共用这个data的组件,而根实例创立时是间接new了一个新的Vue,它每次都是新的且只有一个,所以不会呈现这种数据净化的状况。

3.key的作用和原理

Key的次要作用是更高效的更新虚构DOM,原理是vue在patch过程中能够通过key精准判断两个节点是否是同一个,防止频繁更新DOM,提高效率,以插入数组节点为例,若不应用key,须要更新每一个数组节点,而后最初在创立节点并插入最初一位,而应用key后,则是去循环数组,进行首尾节点比拟,雷同则不做任何更新操作,不同则创立新节点并插入。
不应用key进行插入:

应用key进行插入:

(Vue中diff执行的时刻是组件实例执行其更新函数时,它会比照上一次渲染后果oldVnode和新的的渲染后果newVnode,此过程称为patch)

4.diff算法

a.必要性 组件中可能会存在多个data中的key应用,特地是watcher中,能够精准监找到变动产生的中央
b.执行形式 策略:深度优先,同级比拟, 找到节点中最初一个孩子,再进行比拟,比拟实现后上移持续比拟
c.高效性 次要解决同级比拟