IIFE和命名惯例

时间:2013-11-02 20:15:46

标签: javascript angularjs iife

也许我错过了一些特定于角度或javascript的东西需要这个,但有人可以解释一下是否存在技术原因CarWashService定义了两次?

(function() {

angular.module("cw.services")
    .factory("CarWashService", ['$sce', '$rootScope', function ($sce, $rootScope) {

        var CarWashService;

        return new (CarWashService = (function () {
            function CarWashService() {
                this.results = [];
                this.resultsCountText = "";
                this.PageIndex = 0;
                this.processing = false;
                this.initialized = false;
                this.showNoResults = false;
                this.showResults = false;
                this.noCarWashMessage = $sce.trustAsHtml($rootScope.resources.landingNoCarWashMessage);
            }

            return CarWashService;

        })());

    }]);

}).call(this);

让我失望的是在分配CarWashService的同一行调用return new。对于javascript专家来说,在IIFE中使用除CarWashService之外的其他名称是否有意义,为了便于阅读?或者在进行IIFE时这是一种可接受的模式吗?

1 个答案:

答案 0 :(得分:1)

无论是谁写的都是不必要的复杂,只要声明CarWashService就没有任何好处,因为他们没有利用他们创造的附加封闭。即使他们确实需要私人州的封闭,他们也有外部功能的封闭。

作为旁注,这对于角度也看起来不正确。如果你真的想要一个工厂,这可能应该是返回构造函数而不是它的实例。这看起来应该被声明为服务。