parseEndTag中的是这样写的
if (options.end) {
options.end(stack[i].tag, start, end)
}
end () {
// remove trailing whitespace
const element = stack[stack.length - 1]
const lastNode = element.children[element.children.length - 1]
if (lastNode && lastNode.type === 3 && lastNode.text === ' ' && !inPre) {
element.children.pop()
}
// pop stack
stack.length -= 1
currentParent = stack[stack.length - 1]
closeElement(element)
}
但是end实际上是不接收参数的。那parseEndTag调用end的时候传参的原因是为了代码的整洁吗。和start的用法对应。
其实如果以他的这个用法的话,handleStartTag的stack起到了约束和管理的作用,这里的stack就不是起到约束的作用了,而是起到了管理ast树的作用。虽然这里的stack也没必要约束毕竟前面已经约束过了。是这样嘛。