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