diff算法,递归-M

diff算法

diff算法就是比较真实Dom和虚拟Dom(js对象)之间的差异,然后再去更新视图。
特点:
diff整体策略为:深度优先,同层比较。

  1. 比较只会在同层级进行,不会跨层级比较
  2. 在diff比较的构成中,循环从两边向中间比较
    diff算法在很多场景下都有应用,在vue中,用作于虚拟DOM渲染成真是DOM的新旧VNode节点比较。

递归函数

递归就是对一个数组或者对象无限层级的遍历(必须设置一个终止条件,并且终止条件一定能生效,防止浏览器内存泄漏)。
举例:
利用递归代替for循环:

//依次打印1~10
for (var i = 1; i <= 10; i++) {
    
    
    console.log(i);
}
//借用递归实现
function fn(e) {
    
    
    console.log(++e);
    if (e === 10) {
    
    
        return
    }
    fn(e)
}
fn(0)

递归分为了深度优先和广度优先:
深度优先的意思就是以深度为主。我们可以把树机构的分支看作为一个个路径,当进行深度优先的递归时,程序会在一条路径下,一直走下去,直到不能在走为止,然后换一个路径继续走到底,走的层级很深。
而广度优先则恰恰相反,广度优先是把每一个层级的所有选择都走一遍,只有当第一个层级走完之后,才会走第二个层级。

猜你喜欢

转载自blog.csdn.net/Sunshinedada/article/details/130794344