这几天在升级自己的MVVM 框架,遇到很多小问题,就在这里统一解决了.
with 语法
在代码中,要执行这么一个函数
function computeExpression(exp, scope) {
try {
with (scope) {
return eval(exp);
}
} catch (e) {
console.error('ERROR', e);
}}要求在scope 作用域中执行,什么意思???
比如
scope = {a:10,b:5};exp = a*b;要求计算结果为15,这种情况,常规情况下要使用 with语法。
但是:
js的解释器需要检查with块中的变量是否属于with包含的对象,这将使with语句执行速度大大下降,并且导致js语句很难被优化。
在严格模式中,with语法是被禁用的。
而我使用ES6语法来编写这个库的,默认启用了严格模式了。所以不得已,自己模拟了一个with 的语法。
先看代码
function replaceWith(scopeName, exp) {
exp = " " + exp.trim();
let quickRegex = /([\s\+\-\*\/%&\|\^!\*~]\s*?)([a-zA-Z_$][a-zA-Z_$0-9]*?)/g;
exp = exp.replace(quickRegex, 
