我正在用 JavaScript 编写一个简单的 REPL(读取、评估、打印、循环)实现。我能够像这样隔离代码和调用上下文:
var sandbox = {
// Allow the input code to use predefined helper functions
// without the preceding use of the this keyword.
helper_fn: function() { alert("foo"); }
};
var func = new Function("with (this) { " + user_inputed_code + " }");
func.call(sandbox);
现在它关闭了,user_inputed_code
以便this
引用者sandbox
以及输入的代码是否访问或改变this
它正在影响sandbox
。
但是,我注意到,如果估算的代码不小心忘记在变量赋值前加上var
全局命名空间被污染的关键字。
有没有办法防止这种情况发生?如果是这样(也许是正则表达式?)?有没有更好的方法来解决这个问题?