0

问:您将如何命名位于另一个函数内部的函数中的局部作用域?

让我解释:

我想使用的命名约定有问题。这是一个简单的例子:

!function($, window, undefined) {
    var Variables = {};
    Variables.X = 1;

    function myFunction() {
        var local = {};
        local.X = 2;
        $('.myClass').each(function() {
            var local = {};
            local.X = 3;
        });
    }
}(jQuery, window);

现在,我决定使用名为“变量”的对象来容纳所有在函数之间共享的所有对象。一个全局范围,如果你愿意的话,限制在外部 !function() {} 定义内。

我决定使用名为“local”的对象来容纳函数内的所有对象。我的问题是函数内部的函数范围。我想我必须以某种方式合并函数的名称以使其独一无二。我知道在这个简单的例子中,local.X 是两个独立的变量。但我想分别命名它们,以便人类更容易阅读。我不想在 6 个月后回来想知道 local.X 是什么。

添加到问题的是它是一个匿名函数,因此没有函数名称可以绑定以使“本地范围”唯一可识别。我可能必须制定一个规则,如果在回调函数中需要一个变量,那么给回调函数一个名称并将本地范围与该名称绑定(以某种方式)。

4

2 回答 2

2

您尝试设置范围的方式有点奇怪,并没有真正利用 Javascript 设计来处理这个问题的方式......

更标准的方法是这样的:

function($, window, undefined) {
    var x = 1;

    function myFunction() {
        var y = 2;
        $('.myClass').each(function() {
            var z = 3;
        });
    }
}(jQuery, window);

当然,您似乎想重用相同的变量名...对于最外层x ,您可以给它一个名称空间,例如 myPlugin.x,但是尝试为传递给的函数设置本地范围对each我来说没有多大意义...为了让它影响自身之外的任何东西,它必须只使用 . 范围内的变量myFunction

于 2013-02-24T20:00:31.260 回答
2

我建议依靠语义。即,每个(甚至是匿名的)函数都有一些创建它的目标。

此外,它还提供了两个额外的好处:1)更好的可读性,2)自我证明的代码(我的意思是,如果你没有困难给范围起一个有意义的名字,这意味着你的模型是好的,并且你根据单一职责原则)。

希望这可以帮助。

于 2013-02-24T20:10:52.403 回答