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

完美的JavaScript语法在Eval()中创建错误,javascript,node.js,eval,Javascript,Node.js,Eval,我在Node.js中为多种语言创建了一个非常原始的在线解释器/编译器,只是为了体验一下,我在运行js代码时遇到了一个非常奇怪的问题 当用户发帖时,我会接受他们的输入,稍微转义一下,然后直接将其输入到命令行中。我知道,这是一种糟糕的做法,但我稍后会转到一个新系统,它不涉及直接CMD。此转义会使用双引号和\n、\r等 当获取输入时,我使用命令child_process.exec它是的,我给它一个回调,但我认为这是一个相当长的回调,不需要编写 let parentResults = cp.exec(`

我在Node.js中为多种语言创建了一个非常原始的在线解释器/编译器,只是为了体验一下,我在运行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的生成器只有一行:

eval(process.argv[2]); // Already somewhat-escaped code
现在,当我写这样的东西时

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

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

foo(5);
我在控制台5中得到了正确的输出

但当我做类似的事情时

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

foo(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何时可以自动插入分号的更多说明,请参见示例。

第二个示例中缺少的分号使其出错。应该是:

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

foo(5);

构建器似乎正在删除换行符,否则javascript将无法处理分号的缺失。有关js何时可以自动插入分号的更多说明,请参见示例。

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

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

我不认为这会是一个如此容易的错误。谢谢我想这不会是那么容易的错误。谢谢被选为最佳答案是因为我觉得你的答案在斯图尔特编辑之前对代码失败给出了更好的解释。被选为最佳答案是因为我觉得你的答案在斯图尔特编辑之前对代码失败给出了更好的解释。