vue为什么使用了es5严格模式下不支持的with语句

发布于 2022-09-06 21:47:37 字数 884 浏览 15 评论 0

源码中的两个函数

   function generate(
        ast,
        options
    ) {
        var state = new CodegenState(options);
        var code = ast ? genElement(ast, state) : '_c("div")';
        return {
            render: ("with(this){return " + code + "}"),
            staticRenderFns: state.staticRenderFns
        }
    }
function genStatic(el, state) {
    el.staticProcessed = true;
    state.staticRenderFns.push(("with(this){return " + (genElement(el, state)) + "}"));
    return ("_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + ")")
}

在vm.$options.render中

function() {
    with(this){return _c("div")}
}

Vue.prototype._c, 仅仅是为了省略this吗,with不是存在性能问题么,而且严格模式也不支持。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我恋#小黄人 2022-09-13 21:47:37

首先,严格模式下源码的写法依然可以正常执行,然后是官方解释

  • 为了减少编译器代码大小和复杂度
  • 提供了 vue-loader 这种方式,通过构建工具,将 template 编译成 render
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文