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

9
我有这个控制器。
  .controller('ctrl', function($scope, $rootScope, $timeout, $alert, 
                               $location, $tooltip, $popover, BetSlipFactory, 
                               AccordionsFactory, AuthFactory, 
                               RiskWinCalculations) {...});

同时,由于 jshint,我遇到了以下错误:

第10行,第44列,此函数的语句太多。(41)

那么,我该怎么做才能避免这个错误呢?


4
你的代码管理很差,你应该将其模块化。那么你的代码行数也会超过1000行,我说的对吗? - Pankaj Parkar
1
将其分解为有意义的部分,减少语句数量?或者如果代码重复,使其更少重复。 - user2357112
@NietzscheProgrammer 哦,那真的很酷。难以相信会有这样的情况。你能先删除未使用的内容,然后再检查一下是什么数字吗? - Pankaj Parkar
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
不仅与依赖项有关,当语句过多时,jslint也会抛出此错误。他说在第十行之前,也就是控制器开始的地方,所以从那里开始,他应该有太多的语句了。如果你把所有这些语句放在一个函数中,这些语句将被简化为1个 :) - Reacting
1
天才啊,我把所有这些语句放在一起并封装成一个函数,然后就完成了 :) - Non
1
这对我也解决了问题。我以为jshint担心的是很多行代码,但显然它更担心很多赋值语句。感谢您的答案 :) - Pradep
如果您使用controllerAs语法而不是$scope,您将如何解决此问题? - Andrew Craswell

12

最好的方法是编辑您的jshint设置,以免显示此错误。

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

这是一个非常含糊的jshint警告,它实际上并没有任何意义。

通常情况下,需要超过4或5个参数的函数是不好的想法,因为有很多原因,但从技术上讲并不是错误的。在这种情况下,这些参数是Angular定义依赖项的方式,因此不应该成为问题。如果代码有效,我就不会担心它。


4

如果控制器需要更多语句,而您没有其他方法来删除它,则可以转到您的.jshintrc文件并进行编辑,如下所示:

"maxstatements": 80, // or whatever number you want'

谢谢


我认为这是最好的做法,因为这个限制只控制可读性。 :) - Kandy

0
在 ESLint 中,你可以像这样做:
/*eslint max-statements: ["error", 50, { "ignoreTopLevelFunctions": true }]*/

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

在这里查看文档:ESLint 设置 Max Statements


0
你可以通过以下方式禁用它
/* eslint-disable max-statements */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接