关于javascript:jslint突然报告:使用”use strict”的函数形式

JSLint is suddenly reporting: Use the function form of “use strict”

我包括以下声明:

1
"use strict";

在大多数javascript文件的开头。

JSlint以前从未警告过这一点。但现在,它说:

Use the function form of"use strict".

有人知道"函数形式"是什么吗?


'use strict';作为包装函数中的第一条语句,因此它只影响该函数。这可以防止在连接不严格的脚本时出现问题。

看看道格拉斯·克罗克福德最新的博客帖子《严格模式来了》。

那篇文章的例子:

1
2
3
4
5
6
7
8
(function () {
   'use strict';
   // this function is strict...
}());

(function () {
   // but this function is sloppy...
}());

更新:如果您不想包装立即功能(例如,它是一个节点模块),那么您可以禁用警告。

对于jslint(每个zhami):

1
/*jslint node: true */

JSHint:

1
/*jshint strict:false */

或(每种莱思柚子)

1
/* jshint -W097 */

要禁用JShint中的任意警告,请检查JShint源代码中的映射(详细信息请参阅文档)。

更新2:jshint支持node:boolean选项。见Github的.jshintrc

1
/* jshint node: true */


如果您正在为nodejs编写模块,那么它们已经被封装了。通过在文件顶部包含以下内容,告诉jslint您已经得到了节点:

1
/*jslint node: true */


我建议使用JShint。

它允许通过/*jshint globalstrict: true*/抑制此警告。

如果您正在编写一个库,我只建议在代码被封装到模块中时使用全局严格,就像nodejs一样。

否则,您将强制所有使用您的库的人进入严格模式。


我在跨平台的javascript博客文章之后开始创建node.js/browserify应用程序。我遇到了这个问题,因为我的新gruntfile没有传递JShint。

幸运的是,我在LeanPub的咕噜声书中找到了一个答案:

If we try it now, we will scan our Gruntfile… and get some errors:

1
2
3
4
5
6
7
8
9
10
11
$ grunt jshint

Running"jshint:all" (jshint) task
Linting Gruntfile.js...ERROR
[L1:C1] W097: Use the function form of"use strict".
'use strict';
Linting Gruntfile.js...ERROR
[L3:C1] W117: 'module' is not defined.
module.exports = function (grunt) {

Warning: Task"jshint:all" failed. Use --force to continue.

Both errors are because the Gruntfile is a Node program, and by default JSHint does not recognise or allow the use of module and the string version of use strict. We can set a JSHint rule that will accept our Node programs. Let’s edit our jshint task configuration and add an options key:

1
2
3
4
5
jshint: {
  options: {
    node: true
  },
}

node: true添加到jshint options中,将jshint置于"节点模式",为我消除了这两个错误。


弦的形式没有什么天生的错误。

与其为了担心连接非严格的javascript而避免"全局"严格的形式,不如将该死的非严格的javascript修改为严格的形式。


在项目的根目录中添加一个文件.jslintrc(对于jshint,则为.jshintrc),内容如下:

1
2
3
{
   "node": true
}


我想每个人都错过了这个问题的"突然"部分。很可能,您的.jshintrc有语法错误,所以它不包括"browser"行。通过JSON验证器运行它来查看错误在哪里。


这是多么简单:如果您想要对所有代码都严格,那么在您的javascript开始时添加"use strict";

但是,如果您只想对某些代码严格要求,请使用函数形式。无论如何,我建议您在JavaScript的开头使用它,因为这将帮助您成为更好的编码人员。