在我的应用程序中,我有一些功能包装在一个模块中.要运行这些函数中的任何一个,我向服务器发送一个请求,该请求使用类似"foo({bar:'baz'})"的字符串进行响应.然后我从这个字符串创建一个新函数并运行它.问题是新函数没有看到它所在的范围.这是一个简化的例子:
var foo = (function () {
function bar (fnbody) {
// this one runs
var baz = function() { greet1(); };
baz();
// this one does not
var doit = new Function(fnbody);
doit();
}
function greet1() {
alert('ALOHA!');
}
function greet2() {
alert('SAWADEE!');
}
return {
bar: bar
};
})();
foo.bar('greet2();');
Run Code Online (Sandbox Code Playgroud)
这是jsBin.
任何人都可以解释为什么greet2()没有定义?我怎样才能使这种事情保持功能greet1和greet2私有模块?
提前致谢!
javascript ×1