Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript函数中的作用域变量_Javascript - Fatal编程技术网

JavaScript函数中的作用域变量

JavaScript函数中的作用域变量,javascript,Javascript,问:如果一个函数位于另一个函数的内部,您会如何命名该函数的局部作用域 让我解释一下: 我想使用的命名约定有问题。下面是一个简单的例子: !function($, window, undefined) { var Variables = {}; Variables.X = 1; function myFunction() { var local = {}; local.X = 2; $('.myClass').each(fu

问:如果一个函数位于另一个函数的内部,您会如何命名该函数的局部作用域

让我解释一下:

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

!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”的对象来容纳函数之间共享的所有对象。一个全球范围,如果你愿意,限制在外部!函数(){}定义

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


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

您尝试设置作用域的方式有点奇怪,并且没有真正利用Javascript处理这个问题的方式

更标准的方法是这样的:

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

    function myFunction() {
        var y = 2;
        $('.myClass').each(function() {
            var z = 3;
        });
    }
}(jQuery, window);
当然,对于最外层的
x
您可以给它一个名称空间,例如myPlugin.x,但尝试为它设置一个本地范围 传递给
每个
的函数对我来说没有多大意义…为了让它生效

任何超出其自身范围的内容都必须在
myFunction

的范围内使用变量。您尝试设置范围的方式有点奇怪,并且没有真正利用Javascript处理此问题的设计方式

更标准的方法是这样的:

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

    function myFunction() {
        var y = 2;
        $('.myClass').each(function() {
            var z = 3;
        });
    }
}(jQuery, window);
当然,对于最外层的
x
您可以给它一个名称空间,例如myPlugin.x,但尝试为它设置一个本地范围 传递给
每个
的函数对我来说没有多大意义…为了让它生效

任何超出其本身的东西,它都必须只使用
myFunction

范围内的变量,我建议依赖于语义。也就是说,每个(甚至匿名)函数都有其创建的目标

此外,它还提供了另外两个好处:1)更好的可读性,2)自我证明代码(我的意思是,如果您不难为范围指定一个有意义的名称,这意味着您的模型是好的,并且您的设计是基于)


希望这有帮助。

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

此外,它还提供了另外两个好处:1)更好的可读性,2)自我证明代码(我的意思是,如果您不难为范围指定一个有意义的名称,这意味着您的模型是好的,并且您的设计是基于)


希望这能有所帮助。

为了便于Phillip使用,“var”与“local”基本相同。当你说VarX时,你保证x将是该范围的局部变量。是的,这是真的……你完全可以使用
VarX=2x
,就可以在
myFunction
中使用code>。好的,假设我想在上述三个变量中的每个变量中保留一个“this”对象的副本。在我的场景中,我会有变量。this和local.this。但是我不知道在.each迭代器中我会怎么称呼它。好吧,将
this
与jQuery的
each
方法一起用于除预期用途以外的任何用途都是有问题的……它将
this
(对于迭代器函数)设置为循环中的当前元素。如果在迭代器函数中使用
var
,则只能从当前迭代中访问该变量(如果需要,可以从
myFunction
覆盖现有变量名)。此外,如果
myFunction
是对象中的一个方法,那么您可以在调用
each
之前设置
var self=this
,这将允许您访问
myFunction
this
。只需添加到这一点上,“var”本质上与“local”相同,以便Phillip使用它。当你说VarX时,你保证x将是该范围的局部变量。是的,这是真的……你完全可以使用
VarX=2x
,就可以在
myFunction
中使用code>。好的,假设我想在上述三个变量中的每个变量中保留一个“this”对象的副本。在我的场景中,我会有变量。this和local.this。但是我不知道在.each迭代器中我会怎么称呼它。好吧,将
this
与jQuery的
each
方法一起用于除预期用途以外的任何用途都是有问题的……它将
this
(对于迭代器函数)设置为循环中的当前元素。如果在迭代器函数中使用
var
,则只能从当前迭代中访问该变量(如果需要,可以从
myFunction
覆盖现有变量名)。另外,如果
myFunction
是对象中的一个方法,那么您可以在调用
each
之前设置
var self=this
,这将允许您访问
myFunction
this
。我理解您的问题(变量阴影),但我不理解您试图做什么以及为什么。我理解您的问题(可变阴影)但我不明白你想做什么,为什么。