JSLint is suddenly reporting: Use the function form of “use strict”
我包括以下声明:
1 | "use strict"; |
在大多数javascript文件的开头。
JSlint以前从未警告过这一点。但现在,它说:
Use the function form of"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支持
1 | /* jshint node: true */ |
如果您正在为nodejs编写模块,那么它们已经被封装了。通过在文件顶部包含以下内容,告诉jslint您已经得到了节点:
1 | /*jslint node: true */ |
我建议使用JShint。
它允许通过
如果您正在编写一个库,我只建议在代码被封装到模块中时使用全局严格,就像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 ofuse 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
},
}
将
弦的形式没有什么天生的错误。
与其为了担心连接非严格的javascript而避免"全局"严格的形式,不如将该死的非严格的javascript修改为严格的形式。
在项目的根目录中添加一个文件.jslintrc(对于jshint,则为.jshintrc),内容如下:
1 2 3 | { "node": true } |
我想每个人都错过了这个问题的"突然"部分。很可能,您的.jshintrc有语法错误,所以它不包括"browser"行。通过JSON验证器运行它来查看错误在哪里。
这是多么简单:如果您想要对所有代码都严格,那么在您的javascript开始时添加
但是,如果您只想对某些代码严格要求,请使用函数形式。无论如何,我建议您在JavaScript的开头使用它,因为这将帮助您成为更好的编码人员。