javascript - 这个作用域可以在 JavaScript 中实现吗?

标签 javascript scope javascript-framework lexical-closures

我正在开发一个 JavaScript 框架。我有几个独立的脚本,如下所示:

core.modules.example_module = function(sandbox){
    console.log('wot from constructor ==', wot);

  return{
    init : function(){
      console.log('wot from init ==', wot);
    }
  };
};

此函数是从另一个外部脚本调用的。我正在尝试将变量传递给此函数,以便可以在不使用 this 关键字的情况下访问它们。

上面的例子会出错,说 wot 未定义。

如果我将函数包装在匿名函数中并在那里声明变量,我会得到预期的结果

(function(){

var wot = 'omg';

core.modules.example_module = function(sandbox){
    console.log('wot from creator ==', wot);

  return{
    init : function(){
      console.log('wot from init ==', wot);
    }
  };
};

})();

我想要做的是在作用域链中进一步声明变量,以便可以在模块中访问它们,而无需像第二个示例那样使用 this 关键字。我不相信这是可能的,因为看起来函数执行范围在函数声明时是密封的。

更新
为了澄清我试图定义 wot 的地方。在一个单独的 javascript 文件中,我有一个对象调用这样的寄存器模块函数

core = function(){
   var module_data = Array();
   return{
    registerModule(){
      var wot = "this is the wot value";
      module_data['example_module'] = core.modules.example_module();
    }
  };
};

最佳答案

您要查找的内容称为“dynamic scoping ”,其中通过搜索当前调用链来解析绑定(bind)。它在 Lisp 系列之外不太常见(Perl 通过 local 关键字支持它)。 JS 不支持动态作用域,它使用 lexical scoping .

关于javascript - 这个作用域可以在 JavaScript 中实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2169738/

相关文章:

javascript - 如何制作全局.checked语句并调用它?

javascript - 是否有用于上下文感知弹出窗口的 JavaScript 框架?

java - 如何像Java一样在Javascript中创建Bean类?

javascript - 我可以使用 HTML/CSS 和 javascript 创建一个登录页面,然后再向其中添加 VUE 吗?

javascript - 将控制台答案导出到 xml

javascript - 一个 javascript 文件可以包含在两个 HTML 文档中吗?

swift - Swift 中的类内部协议(protocol)

Javascript:访问正确的范围 "under"apply(...)

Javascript:如何将 JSON 点字符串转换为对象引用

JavaScript 整数输入提示验证