JSLint突然报告:使用“严格使用”的函数格式

我包括这样的陈述:

"use strict"; 

在我的大部分Javascript文件的开始。

JSLint以前从未对此提出警告。 但现在是这样说:

使用“使用严格”的函数forms。

有谁知道“function表”是什么?

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

请参阅道格拉斯·克罗克福德(Douglas Crockford)最新的博客文章严格模式即将到来 。

来自该post的示例:

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

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

对于JSLint (每Zhami ):

 /*jslint node: true */ 

对于JSHint

 /*jshint strict:false */ 

或(每莱斯Shadeed )

 /* jshint -W097 */ 

要禁用任何来自JSHint的任意警告,请检查JSHint源代码中的地图( 文档中的详细信息)。

更新2: JSHint支持node:boolean选项。 请参阅github上的.jshintrc

 /* jshint node: true */ 

如果你正在为NodeJS编写模块,它们已经被封装了。 告诉JSLint,通过在文件顶部包含节点来获取节点:

 /*jslint node: true */ 

我build议使用jshint来代替。

它允许通过/*jshint globalstrict: true*/来禁止这个警告。

如果你正在编写一个库,我只会build议使用全局严格的,如果你的代码被封装成模块,就像nodejs一样。

否则,你会强迫所有使用你的库的人进入严格模式。

stringforms没有天生的错误。

而不是避免“非全局”严格的forms,因为担心连接非严格的JavaScript,这可能是更好的只是修复该死的非严格的JavaScript是严格的。

我开始在跨平台JavaScript博客文章之后创build一个Node.js / browserify应用程序。 我遇到了这个问题,因为我的全新Gruntfile没有通过jshint。

幸运的是我在Leanpub关于Grunt的书中find了一个答案:

如果我们现在尝试,我们将扫描我们的Gruntfile …并得到一些错误:

 $ 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. 

这两个错误都是因为Gruntfile是一个Node程序,默认情况下JSHint不能识别或者允许使用moduleuse strict的string版本。 我们可以设置一个JSHint规则来接受我们的Node程序。 让我们编辑我们的jshint任务configuration并添加一个选项密钥:

 jshint: { options: { node: true }, } 

添加node: true对jshint optionsnode: true ,将jshint放入“节点模式”,为我删除两个错误。

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

 { "node": true } 

我想每个人都想念这个问题的“突然”部分。 最有可能的是,你的.jshintrc有一个语法错误,所以它不包括“浏览器”行。 通过jsonvalidation器运行它,看看错误在哪里。

这是多么简单:如果你想严格所有的代码,添加"use strict"; 在你的JavaScript的开始。

但是如果你只想对你的代码进行严格的处理,就使用函数表单。 无论如何,我会build议你在JavaScript的开始使用它,因为这将帮助你成为一个更好的编码器。