0

谁能解释一下下面的代码的作用,尤其是第 1 点和第 2 点:

1)

(function (carWeb) {    
})(carWeb || (carWeb = {}));

更新 2)为什么IIFE里面声明了下面的函数,而GridView用了四次

 function GridView() {            
        }    

// usercontrols.gridview.js

var carWeb;
(function (carWeb) {
    carWeb.GridView = (function () {

        function GridView() {            
        }        
        GridView.init = function (gridSelector, threeGridButtonSelector) {
            GridView.gridSelector = gridSelector;            
            threeGridButtonSelector.on("click",  this.setThree);                     
        };

        return GridView;
    })();

})(carWeb || (carWeb = {}));
carWeb.GridView.init($("#top.items"), $("#grid-view-grid")));

更新

任何链接将不胜感激。

为什么这个问题被搁置?请投票以重新打开帖子,并为帖子投票

4

1 回答 1

1

它将 GridView 子模块添加到 carWeb 模块,同时

  • 确保 carWeb 模块存在(如果 carWeb 未定义,则(carWeb = {})语句定义它)
  • 如果脚本被缩小,carWeb 变量名可以被缩小(但由于变量是在之前用var语句定义的,这不是必需的)
  • 用于此模块的变量是私有的,不会污染全局命名空间,使用IIFE 模式

这种方法很常见,因为如果您在不同的文件中定义了许多子模块,则文件的顺序并不重要,您可以根据需要添加或删除文件(即子模块)。

另一种不太冗长的编写方式(我通常的解决方案)是:

var carWeb = carWeb || {}
(function(){
   carWeb.GridView = ...
})();

例子

于 2013-09-09T16:45:03.520 回答