控制变量范围
Controlling variable scope
我已经找到了一些类似的问题,但我觉得里面提供的答案并不能完全消除我的困惑。
我在玩jQuery时遇到过这个问题,但我想这更像是一个JS问题,而不是jQuery特有的问题。
我觉得在下面的例子中,我希望定义的这些变量是全球化的好候选者,它们在一些函数之外有广泛的用途,但我觉得我想限制暴露。
$(function() {
$containers = $('.container');
$childContainer = $('#childContainer');
//Removed extra code
var $aButton = $('#childButton');
//Removed extra code
$containers.hide();
$childContainer.show(400);
$aButton.on('click', clickChildButton);
//Removed extra code
};
function clickChildButton() {
$containers.hide(400);
$childContainer.show(400);
}
我会有一些按钮显示/隐藏各种容器。在所有情况下,$containers
变量都需要对其他函数可见,以便隐藏它。
我应该使用全局变量(或者可能是名称空间全局对象破解),还是有其他方法可以限制$containers
变量的范围?
我不太喜欢使用匿名函数来处理点击事件,因为它们会变得有点复杂(并且包含的不仅仅是clickChildButton
函数中显示的两行。
注意:在这个特定的例子中,重构代码并创建一个hideContainers
函数可能会更好,但我更感兴趣的是如何控制变量的范围,而不是这个特定的示例。
感谢
在JavaScript(ES6之前)中,所有变量都是函数范围的。因此,确定变量范围的唯一方法是使其成为函数的局部变量。
你有两个基本的选择。一种是使clickChildButton
成为$(function(...) {...})
的本地,因为它是唯一相关的地方:
$(function() {
var $containers, $childContainer;
function clickChildButton() {
$containers.hide(400);
$childContainer.show(400);
}
...
});
如果你需要更宽但不太宽的范围,另一种选择是将所有内容打包到IIFE:中
(function() {
$(function() {
...
});
function clickChildButton() {
....
});
)();
相关文章:
- 自定义指令模板中的AngularJS控制变量
- 在 Angular 指令中,如何进行回调,其中函数名称位于父范围的变量中
- 使用javascript中的var关键字创建块范围的变量
- 把手助手(Emberjs)中的访问控制变量
- 选中的Angular HTML列表将所选值放入应用程序范围的变量和跨度中
- 控制变量范围
- 是否有任何方法可以访问外部范围's变量
- 为什么循环控制变量没有在当前值处传递给回调函数
- ES6 块范围的变量定义作为条件
- AngularJS:你如何创建应用程序范围的变量来更新自己
- 如何在javascript中声明一个具有html页面范围的变量
- 如何从外部范围将变量传递给.then()回调函数
- JavaScript中的词法范围,变量生存期和承诺
- 指令angular中的访问范围控制器变量
- 带有滑块的控制变量
- Angular2 (RC5)中应用范围的变量
- 如何控制变量吊装
- 用对象范围的变量封装对象中的函数和变量
- 包装咖啡脚本范围-使用变量's值
- 在 JavaScript 中使用 DOM 理解范围和变量时遇到困难