请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于end

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也没必要约束毕竟前面已经约束过了。是这样嘛。

正在回答

1回答

课程分析的这个版本没有用到这个参数,不过最新版本的 Vue 用到了 end 参数,不过也仅是在开发环境中用到。stack 的目的是记录在树的解析过程中创建的 ast 元素,在 start 的时候入栈,end 的时候出栈。


0 回复 有任何疑惑可以回复我~
  • 提问者 MeSKiL #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-11-12 14:30:48
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信