vue源码解析---AST抽象语法树

本文介绍了抽象语法树(AST)的概念,通过JavaScript指针和递归应用到斐波那契数列和字符串格式化,展示了栈结构在构建智能重复函数中的运用。详细讲解了如何解析模板字符串和构建AST树的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

首先AST是什么?

 指针思想

递归深入(斐波那契数列)

递归深入(形式转换)

 栈结构

 AST语法树


首先AST是什么?

在计算机科学中,抽象
 语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。

我们可以理解为:把 template(模板)解析成一个对象,该对象是包含这个模板所以信息的一种数据,而这种数据浏览器是不支持的,为Vue后面的处理template提供基础数据。

 

 指针思想

JavaScript中的指针其实就是下标位置,下面以一个例子来使用指针思想。

寻找字符串中连续最多的字符

(如果i和j指向的字是一样的j不动,i后移,不一样说明之间 的字母是连续的让j追上i  后移)

let str = 'aaaaabbcccdd'

// 指针
let i = 0, j = 0, maxlen = 0, maxStr = '';
while (i <= str.length) {
    if (str[i] != str[j]) {
        console.log(`${j}和${i}之间的文字相同都是字符${str[j]}他们重复了${i - j}次`);
        if (maxlen < i - j) {
            maxlen = i - j
            maxStr = str[j];
        }
        j = i
    }
    i++

}
console.log(maxStr);

递归深入(斐波那契数列)

规则复现就要想到递归

试输出斐波那契数列第十项思考是否有重复计算(采用缓存的思路减少重复计算)

function fib(n) {
    console.count('计数')
    let v = n == 0 || n == 1 ? 1 : fib(n - 1) + fib(n - 2)
    return v
}
let cache = {}
function fib2(n) {
    console.count('计数')
    // hasOwnProperty表示是否有自己的属性。这个方法会查找一个对象是否有某个属性,
    if (cache.hasOwnProperty(n)) {
        return cache[n]
    }
    let v = n == 0 || n == 1 ? 1 : fib2(n - 1) + fib2(n - 2)
    cache[n] = v
    return v
}
for (let i = 0; i <= 9; i++) {
    fib2(i)

}
console.log(cache);

递归深入(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端 贾公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值