小编cyx*_*xou的帖子

从字符串创建的函数不会看到父作用域

在我的应用程序中,我有一些功能包装在一个模块中.要运行这些函数中的任何一个,我向服务器发送一个请求,该请求使用类似"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
推荐指数
2
解决办法
42
查看次数

标签 统计

javascript ×1