我想在给定'functionToRun'的范围内使用像'thisModule'这样的局部变量,而不将它们作为参数传递。
Onsetsu.run = function (functionToRun) {
var thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun();
};
Onsetsu.run(function() {
/* thisModule should be visible here */
});
不幸的是,'thisModule'未在范围内定义。 有没有一种方便的方法将'thisModule'引入函数范围?
答案 0 :(得分:1)
您可以将thisModule附加到functionToRun
中的this引用Onsetsu.run = function (functionToRun) {
var thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun.apply(thisModule,[]);
};
所以在你的函数中你可以像这样引用thisModule:
function myFunc(){
console.log(this); // which will refer to thisModule
}
Onsetsu.run(myFunc);
答案 1 :(得分:1)
在functionToRun
和Onsetsu.run
的最近共享范围内定义变量。在Onsetsu.run
:
var thisModule;
Onsetsu.run = function (functionToRun) {
thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun();
};
Onsetsu.run(function() {
/* thisModule should be visible here */
});
假设您的实际代码比这更复杂:
(function(){
var thisModule;
var Onsetsu = (function(){
var resolvedModule = { moduleName: "something" };
return {
run: function (functionToRun) {
thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun();
},
namespace: function(moduleName){ ... }
};
})();
Onsetsu.run(function() {
/* thisModule should be visible here */
});
})();
如果Onsetsu
是您不能(或不想)修改的库,那么您就不走运了。
修改:您还可以在函数本身上分配属性:
Onsetsu.run = function (functionToRun) {
var thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun.module = thisModule;
functionToRun();
};
您可以通过functionToRun
arguments.callee
内访问该媒体资源
Onsetsu.run(function() {
var module = arguments.callee.module;
});
或者通过给函数命名:
Onsetsu.run(function fn() {
var module = fn.module;
});