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

源码中的两个函数

   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不是存在性能问题么,而且严格模式也不支持。

阅读 4k
1 个回答

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

  • 为了减少编译器代码大小和复杂度
  • 提供了 vue-loader 这种方式,通过构建工具,将 template 编译成 render
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题