我正在开发一个 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/