这个函数的语句太多了。 (41)

问题描述 投票:0回答:5

我有这个控制器

  .controller('ctrl', function($scope, $rootScope, $timeout, $alert, 
                               $location, $tooltip, $popover, BetSlipFactory, 
                               AccordionsFactory, AuthFactory, 
                               RiskWinCalculations) {...});

并且,由于

jshint

,我收到此错误

line 10 col 44 该函数有太多语句。 (41)

那么,我应该怎样做才能避免呢?

javascript angularjs jshint
5个回答
15
投票

这并不意味着像 @pankajparkar 之前所说的管理不善的代码,这可能是因为你有这样的东西,让我们从我的一个项目中这样说:

  $scope.betLoader = false;
  $scope.showIfbetAlerts = true;
  $scope.displayStraight = true;
  $scope.displayParlay = true;
  $scope.displayIfBet = true;
  $scope.displayTeaser = true;
  $scope.displayPleaser = true;
  $scope.displayReverse = true;
  $scope.unavailableBet = false;
  $scope.subAccordion = false;
  $scope.betTypeShow = false;
  $scope.showStraight = true;

你可以这样做:

$scope.setInitialState = function() {
  $scope.betLoader = false;
  $scope.showIfbetAlerts = true;
  $scope.displayStraight = true;
  $scope.displayParlay = true;
  $scope.displayIfBet = true;
  $scope.displayTeaser = true;
  $scope.displayPleaser = true;
  $scope.displayReverse = true;
  $scope.unavailableBet = false;
  $scope.subAccordion = false;
  $scope.betTypeShow = false;
};
$scope.setInitialState();

这样就可以解决问题。

更新

让我解释一下:

它不仅与依赖关系有关,当语句太多时,jslint 会抛出此错误,他在第 10 行之前说过,这是控制器开始的地方,所以从那里开始,他应该有太多语句,如果你把所有1 个函数中的那些语句,这些语句将减少到 1 :)


12
投票

消除错误的最佳方法是编辑

jshint
设置以不显示它。

http://jshint.com/docs/options/#maxstatements

这是一个非常空洞的

jshint
警告,实际上没有任何意义。

通常,出于多种原因,需要超过 4 或 5 个参数的函数是一个坏主意,但在技术上并没有错误。在这种情况下,这些参数是 Angular 定义依赖关系的方式,所以应该不是问题。如果代码有效,我就不会担心。


4
投票

如果控制器想要更多语句,并且您没有任何其他方法来删除它,则转到您的 .jshintrc 文件并像

那样编辑它
"maxstatements": 80, // or whatever number you want'

谢谢


0
投票

在 ESLint 中,你可以这样做:

/*eslint max-statements: ["error", 50, { "ignoreTopLevelFunctions": true }]*/

您可以根据需要将 50 替换为您想要的任何最大值。

请参阅此处的文档:ESLint 设置最大语句


0
投票

您可以使用禁用它

/* eslint-disable max-statements */
© www.soinside.com 2019 - 2024. All rights reserved.