【问题标题】:IIFEs and naming conventionsIIFE 和命名约定
【发布时间】:2013-11-13 19:30:07
【问题描述】:

也许我错过了一些特定于 Angular 或 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 时这是一种公认​​的模式?

【问题讨论】:

  • 这看起来太复杂了,仅此而已。

标签: javascript angularjs iife


【解决方案1】:

无论是谁写的只是让它变得不必要的复杂,仅仅声明CarWashService 绝对没有任何好处,因为他们没有使用他们创建的额外闭包。即使他们确实需要一个私有状态的闭包,他们也有一个来自外部函数的闭包。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2017-12-12
    相关资源
    最近更新 更多