完美 JavaScript 语法在 Eval() 中创建错误

Perfectly fine JavaScript syntax creating error in Eval()

我正在 Node.js 中为多种语言创建一个非常原始的在线 interpreter/compiler 只是为了体验,我 运行 遇到了一个非常奇怪的问题 运行宁JS代码.

当用户发帖时,我接受他们的输入,稍微转义,然后将其直接输入命令行(我知道这是糟糕的做法,但我稍后会转移到一个新系统,它不会涉及到直接CMD)这个转义双引号和\n,\r等

当获得输入时,我child_process.exec它用命令(是的,我给它一个回调,但它是一个相当长的,我认为没有必要写)

let parentResults = cp.exec(`node ./builders/${this.builder}.js "${this.escapedCode}"`);
// First parameter represents the builder to run the user input with
// and escaped code is self-explanatory

处理JS的builder只有一行:

eval(process.argv[2]); // Already somewhat-escaped code

现在,当我写类似

的东西时
function foo(x) {
  console.log(x);
}

foo(5);

我在 5 的控制台中得到了正确的输出。

但是当我做类似的事情时

let foo = function(x) {
  console.log(x);
}

foo(5);

我收到一条错误消息

console.log(x); 
  ^

SyntaxError: Unexpected identifier

当我使用箭头语法时也会发生同样的事情。我不知道是什么绊倒了它。有什么想法或帮助吗?

是第二个例子中缺少的分号导致了错误。应该是:

let foo = function(x) {
  console.log(x);
};

foo(5);

您的构建器似乎正在删除换行符,否则 javascript 可以处理分号缺失的问题。 (有关 js 何时可以自动插入分号的更多说明,请参见 here。)

我认为问题在于您在第二种情况下 } 之后缺少 ;。通常这不会是一个问题,因为 javascript 将 \n 解释为声明的结尾,但你说你正在删除 \n,所以这就是它失败的原因。