Javascript AngularJS和IILife

Javascript AngularJS和IILife,javascript,angularjs,Javascript,Angularjs,我已经开始学习AngularJS,在阅读一些代码示例时,我发现了以下内容: (function(app) { 'use strict'; app.directive('sideBar', sideBar); function sideBar() { return { restrict: 'E', replace: true, templateUrl: '/scripts/spa/layout/my

我已经开始学习AngularJS,在阅读一些代码示例时,我发现了以下内容:

(function(app) { 
    'use strict';
    app.directive('sideBar', sideBar);
    function sideBar() { 
      return { 
         restrict: 'E', 
         replace: true, 
         templateUrl: '/scripts/spa/layout/mypage.html' 
         } 
     }
  })(angular.module('common.ui'));
上面的代码使用IIFE创建一个自定义指令。我对代码的最后一行感到非常困惑。它正在传递一个名为common.ui的模块。有人能解释一下这种传递参数的方式是如何工作的,以及如何以不同的方式重写吗?

如果没有最后的参数(传递angular.module),它将只是一个已定义但没有做任何事情的函数,没有名称就不能调用。帕伦斯夫妇正在立即调用它

就重写而言,可以使用名称定义它,然后调用它。因为它只会被调用一次,所以不需要给它命名。相反,它只是运行


使用IIFE还有其他原因(如封装数据或绕过异步代码的闭包),但在这种情况下,实际上只是避免命名然后调用。

在()存在之前,上层函数不在范围内或不可见 您正在为上层函数定义参数并调用它。

angular.module('common.ui')
将被
应用程序引用。看

你可以正常申报

(function() {
    var app = angular.module('common.ui');
})();
angular.module('common.ui')
app
引用。看见