问:你会在另一个函数内部的函数中命名本地作用域吗?
让我解释一下:
我遇到了我想要使用的命名约定的问题。这是一个简单的例子:
!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是什么。
添加问题的是它是一个匿名函数,因此没有函数名称可以绑定以使“本地作用域”唯一可识别。我可能必须编写一个规则,如果在回调函数中需要一个变量,那么给回调函数一个名称,并将本地范围与该名称联系起来(不知何故)。
答案 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}})设计。
希望这有帮助。