替换为'with`块?

时间:2017-09-23 02:12:14

标签: javascript node.js templates

我正在使用与pug(以前的玉)相当的模板系统。模板可以包含javascript行。我使用with块解决了它:

- var foo = "bar"  // javascript
p(class=foo)!= bar

编译为:

function generatedFromString(context) {
    var result = '';
    with (context) {
        var foo = "bar"  // javascript
        result += '<p class="';
        result += escapeHtml(foo);
        result += '">';
        result += bar;
        result += '</p>';
        return result;
    }
}

这很有效。但是,我知道with 已弃用,在严格模式下甚至是禁止

所以,我的下一个想法是将context的所有值复制到global。但我怀疑这更糟糕,因为它会污染全局命名空间并减慢脚本速度。

除此之外,当模板中使用未声明的变量时,我不想获得 ReferenceError 。因此,似乎唯一的解决方案是将输出更改为

        context.foo = "bar"  // javascript

但是我必须解析javascript ,这需要付出更多的努力。

有谁知道是否有更好的解决方案?或者是否有必要解析javascript?

0 个答案:

没有答案