考虑到在学习中心的代码组织部分发布的关于模块模式的最后一个代码片段(下面报告),我试图理解示例中模块的某些方面:
- 变量声明 (
$items
,$container
...) 由 分隔,;
而函数声明 (createContainer
,buildUrl
,showItem
, ....) 由 分隔,
。为什么?有支架问题吗? - 为什么前三个变量( 和 )的
$items
名称$container
以$currentItem
开头$
?这是否意味着用于标识 DOM 片段变量的命名约定(因为javascript
允许使用 character$
)还是有其他原因? - 为什么函数
createContainer
声明为 usingvar
而其他函数 (buildUrl
,showItem
,...) 没有var
?
// 为 jQuery 功能使用模块模式 $( document ).ready(function() {
var feature = (function() {
var $items = $("#myFeature li");
var $container = $("<div class='container'></div>");
var $currentItem = null;
var urlBase = "/foo.php?item=";
var createContainer = function() {
var $i = $( this );
var $c = $container.clone().appendTo( $i );
$i.data( "container", $c );
},
buildUrl = function() {
return urlBase + $currentItem.attr("id");
},
showItem = function() {
var $currentItem = $( this );
getContent( showContent );
},
showItemByIndex = function( idx ) {
$.proxy( showItem, $items.get( idx ) );
},
getContent = function( callback ) {
$currentItem.data("container").load( buildUrl(), callback );
},
showContent = function() {
$currentItem.data("container").show();
hideContent();
},
hideContent = function() {
$currentItem.siblings().each(function() {
$( this ).data("container").hide();
});
};
$items.each( createContainer ).click( showItem );
return {
showItemByIndex: showItemByIndex
};
})();
feature.showItemByIndex( 0 );
});