jshint“使用严格”的问题

jshint “use strict” issue

本问题已经有最佳答案,请猛点这里访问。

这是我的档案:app/scripts/controllers/main.js

1
2
3
4
5
6
7
8
9
10
"use strict";

angular.module('appApp')
  .controller('MainCtrl', ['$scope', function ($scope) {
    $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];
  }]);

我的Gruntfile.coffee有:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
jshint:
    options:
        globals:
            require: false
            module: false
            console: false
            __dirname: false
            process: false
            exports: false

    server:
        options:
            node: true
        src: ["server/**/*.js"]

    app:
        options:
            globals:
                angular: true
                strict: true

        src: ["app/scripts/**/*.js"]

当我运行grunt时,我得到:

1
2
3
Linting app/scripts/controllers/main.js ...ERROR
[L1:C1] W097: Use the function form of"use strict".
"use strict";


问题是,如果您不使用函数形式,它将应用于所有内容,而不仅仅是您的代码。解决方案是将use strict范围限定在您控制的函数内。

参考这个问题:jslint突然报告:使用"use strict"的函数形式。

而不是做

1
2
3
4
5
6
7
8
9
10
"use strict";

angular.module('appApp')
  .controller('MainCtrl', ['$scope', function ($scope) {
    $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];
  }]);

你应该这么做

1
2
3
4
5
6
7
8
9
10
angular.module('appApp')
  .controller('MainCtrl', ['$scope', function ($scope) {
   "use strict";

    $scope.awesomeThings = [
      'HTML5 Boilerplate',
      'AngularJS',
      'Karma'
    ];
  }]);

要么就是这样,要么把代码包装在一个自动执行的闭包中,如下所示。

1
2
3
4
5
(function(){
   "use strict";

    // your stuff
})();


把我的Gruntfile.coffee改为包括globalstrict

1
2
3
4
5
6
7
8
9
10
jshint:
    options:
        globalstrict: true
        globals:
            require: false
            module: false
            console: false
            __dirname: false
            process: false
            exports: false