这几天在升级自己的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, 
        
		

网友评论