在JavaScript函数中使用范围变量

时间:2013-02-24 19:50:10

标签: javascript

问:你会在另一个函数内部的函数中命名本地作用域吗?

让我解释一下:

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

!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);

现在,我已经决定使用名为“Variables”的对象来容纳在函数之间任何地方共享的所有对象。如果愿意,全局范围限于外部!function(){}定义。

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

添加问题的是它是一个匿名函数,因此没有函数名称可以绑定以使“本地作用域”唯一可识别。我可能必须编写一个规则,如果在回调函数中需要一个变量,那么给回调函数一个名称,并将本地范围与该名称联系起来(不知何故)。

2 个答案:

答案 0 :(得分: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范围内的变量。

答案 1 :(得分:2)

我建议依赖语义。即每个(甚至是匿名的)函数都有为其创建的目标。

此外,它还提供了两个好处:1)更好的可读性,2)自我证明代码(我的意思是,如果你没有困难给范围一个有意义的名字,它意味着你的模型很好,而你根据{{​​3}})设计。

希望这有帮助。