with 语法或许从学习 JS 第一天就有人说他不好,尽量不要使用,那么:
1.他具体不好在哪里
2.vue 在 compile 的源码中大肆的使用了它为什么
with(this){
}
答案:
1.with 本身实现上有一些 bug 的,比如如下代码:
var obj={};
with(obj){
a = 30;
}
console.log(obj.a);
如上这样是取不到的,反而会得到一个全局的变量 a ,而且 with 一旦在闭包内执行将放弃当前闭包全部变量的回收,造成 GC。
唯一的好处就是本身使用 with 能节省多次调用 with 并形成的块级作用域。
2.vue 并没有对模板中的 javascript 表达式进行 ast 语法分析,如果要移除 with ,就需要对 javascript 表达式进行 ast 语法分析,并且还需要一个专门的解释器对 ast 语法树进行解释,这样就会导致存在两个并行的解析器,这样维护成本过高。
探讨了with语法的潜在问题,如作用域污染和内存泄漏,并解释了Vue为何在编译模板时仍使用with语法,主要是因为去除它的成本过高。
1041

被折叠的 条评论
为什么被折叠?



