【发布时间】:2014-05-28 18:33:28
【问题描述】:
这与另一个问题有关:
Last evaluated expression in Javascript
但我想提供更多关于我想做的事情的详细信息,并展示我如何最终解决了一些用户在 cmets 中要求的问题。
我有我的应用程序用户编写的 Javascript 的 sn-ps。这个sn-ps需要去这样一种模板:
var foo1 = function(data, options) {
<snippet of code written by user>
}
var foo2 = function(data, options) {
<snippet of code written by user>
}
...
表达式可以非常不同,从简单的事情如下:
data.price * data.qty
像这样更复杂的事情:
if (data.isExternal) {
data.email;
} else {
data.userId;
}
函数返回的值应该始终是最后计算的表达式。
在我们有这样的事情之前:
var foo1 = function(data, options) {
return eval(<snippet of code written by user>);
}
但是由于我们正在进行优化和更改,我们无法继续使用 eval,但我们需要返回最后一个评估的表达式。
仅仅添加一个'return'关键字是行不通的,因为表达式可以有多个语句。所以我需要让这些函数返回最后评估的表达式。
限制和说明:
- 我不能强制用户在他们拥有的所有脚本中添加“return”关键字,因为已经编写了许多脚本,对于“a * b”这样的简单表达式来说不是很直观。
- 我正在使用 Java 和 Rhino 在服务器端运行 Javascript。
【问题讨论】:
标签: java javascript rhino abstract-syntax-tree