【发布时间】:2016-04-01 01:05:24
【问题描述】:
我已经找到了一些类似的问题,但我觉得其中提供的答案并不能完全消除我的困惑。
我在玩 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 变量都需要对其他函数可见才能隐藏。
我应该使用全局变量(或者可能是命名空间全局对象 hack)还是有其他方法可以限制 $containers 变量的范围?
我不太热衷于使用匿名函数来处理点击事件,因为它们将开始变得更加复杂(并且不仅仅包含 clickChildButton 函数中显示的两行代码。
注意:在这个特定示例中,重构代码并创建一个hideContainers 函数可能会更好,但我更感兴趣的是如何控制一般变量的范围,而不是这个特定示例。
谢谢
【问题讨论】:
-
I feel like in the below example these variables that I wish to define would be good candidates to be global- 你应该拥有尽可能少的全局变量,最好没有。如果您必须全局公开某些内容,请公开一个命名空间变量(一个对象)并将所有其他 globals 挂在此命名空间之外。限制范围的最佳方法是将所有内容包装在IIFE中并使用var- 瞧 - 没有全局变量。 -
@Adam:谢谢你的评论,我怀疑你说的可能是这样。根据您在此处的评论和 Amadan 在下方的评论,我将走 IIFE 路线。
标签: javascript jquery scope