javascript - 在给定函数范围内使用变量而不传递

标签 javascript function scope local-variables

我想在给定的“functionToRun”范围内使用“thisModule”等局部变量,而不将它们作为参数传递。

Onsetsu.run = function (functionToRun) {
    var thisModule = Onsetsu.namespace(resolvedModule.moduleName);
    functionToRun();
};

Onsetsu.run(function() {
    /* thisModule should be visible here */
});

不幸的是,“thisModule”未在范围中定义。 有没有一种方便的方法将“thisModule”带入函数范围?

最佳答案

functionToRunOnsetsu.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.calleefunctionToRun 中访问该属性:

Onsetsu.run(function() {
    var module = arguments.callee.module;
});

或者通过给函数命名:

Onsetsu.run(function fn() {
    var module = fn.module;
});

关于javascript - 在给定函数范围内使用变量而不传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13460389/

相关文章:

JavaScript 关闭问题 : why is the second call to outerFn creating a new instance of outerVar?

javascript - 在 JavaScript 中计算以 ISO 8859-7 编码的文件的字节大小

c++ - 函数重载和模板

c - 单片机上的uart软件阅读——代码理解

asp-classic - 在 Classic ASP 的应用程序范围内使用字典对象

ios - 在 session 后无法识别的 NSURL session 期间添加到 NSMutableArray()

javascript - var [foo] = bar 的含义?

javascript - XDomainRequest 有时会随机中止

javascript - javascript 中的重写方法

python - 使范围内的所有值显示在 x 轴上