const a = ${b} world
底层是不是类似replace的功能实现的
不是,个人感觉 字符串替换解决不了逻辑问题 比如 ${a+b}
'+'号怎么处理
一般是经过词法分析语法分析做成一个函数在某个作用域下去执行
参考vue的编译
<div>{{a+b}}</div>
=>
export function render(_ctx, _cache, $props, $setup, $data, $options) {
return (_openBlock(), _createElementBlock("div", null, _toDisplayString(_ctx.a+_ctx.b), 1 /* TEXT */))
}
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
简短回答:不是
太长不看版:规范只是定义了语言中有这种特性,并没有规定如何实现,各种JS引擎选自己的实现。
而从定义来看,简单的字符串替换并不足以实现全部的特性。
一种可能的实现是从词法解析阶段就开始了,v8源码太多,选择一个相对精简的实现来参考 quickjs
再举个简单的例子
被解析为
到语法解析阶段, 从 token_template 开始,到 token_string 结束(没有的加一个空字符串) 构成一个插值表达式(或者说模板字符串)。