有什么办法可以在特定范围内执行eval()(但不是全局)?
例如,以下代码不起作用(在第二个语句中未定义)因为它们位于不同的范围内:
eval(var a = 1);
eval(alert(a));
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想动态创建一个范围.例如(语法肯定是错误的,但只是为了说明这个想法)
var scope1;
var scope2;
with scope1{
eval(var a = 1); eval(alert(a)); // this will alert 1
}
with scope2{
eval(var a = 1); eval(a++); eval(alert(a)); // this will alert 2
}
with scope1{
eval(a += 2); eval(alert(a)); // this will alert 3 because a is already defined in scope1
}
Run Code Online (Sandbox Code Playgroud)
有关如何实现这样的事情的任何想法?谢谢!
我试图在特定的上下文中执行eval.我发现这里的答案很有用.但是,我在Chrome版本53.0.2785.143 m中收到以下行为.没试过其他浏览器.我使用的代码如下:
function evalInContext(js, context) {
return function() { return eval(js); }.call(context);
}
console.log(evalInContext('x==3', { x : 3})) // Throws
console.log(evalInContext('this.x==3', { x : 3})) // OK
Run Code Online (Sandbox Code Playgroud)
不过我期待第一次打电话evalInContext不要扔.任何想法为什么会这样?
我知道PHP有call_user_func,我只是想知道JavaScript是否有类似的东西,我要调用的方法是,例如:object.set$fieldID($fieldValue)
我宁愿不通过if/else/switch块来正确执行一行代码.
如果它有帮助,我使用jQuery.
我想使用 AWS Lambda 运行用户通过 Web 提交的 JavaScript 代码。我的 Lambda 函数将返回返回值 、stderr和stdout。这样做我可能会遇到什么问题?
恶意用户是否能够提交导致 Lambda 函数出现问题的代码?用户所做的更改(例如对节点环境或文件系统的更改)是否在调用中持续存在?有什么办法可以防止这种情况发生吗?
我eval()可以将文件写入 Lambda 文件系统并调用:
const userCodeProcess = require('child_process').fork('user_code.js')
userCodeProcess.on('message', response.send)
Run Code Online (Sandbox Code Playgroud) child-process amazon-web-services node.js aws-sdk aws-lambda