我想在给定的“functionToRun”范围内使用“thisModule”等局部变量,而不将它们作为参数传递。
Onsetsu.run = function (functionToRun) {
var thisModule = Onsetsu.namespace(resolvedModule.moduleName);
functionToRun();
};
Onsetsu.run(function() {
/* thisModule should be visible here */
});
不幸的是,“thisModule”未在范围中定义。 有没有一种方便的方法将“thisModule”带入函数范围?
最佳答案
在 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();
};
您可以通过 arguments.callee
从 functionToRun
中访问该属性:
Onsetsu.run(function() {
var module = arguments.callee.module;
});
或者通过给函数命名:
Onsetsu.run(function fn() {
var module = fn.module;
});
关于javascript - 在给定函数范围内使用变量而不传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13460389/