我附上以下声明:

"use strict";

在大多数Javascript文件的开头。

JSLint以前从未对此发出过警告。但现在它说:

使用“Use strict”的函数形式。

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


当前回答

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

幸运的是,我在Leanpub关于Grunt的书中找到了答案:

If we try it now, we will scan our Gruntfile… and get some errors: $ 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: jshint: { options: { node: true }, }

添加节点:true的jshint选项,把jshint进入“节点模式”,为我消除了这两个错误。

其他回答

字符串形式本身并没有什么问题。

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

它是如此简单:如果你想对你所有的代码都严格,添加“use strict”;在JavaScript的开头。

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

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

{
    "node": true
}

我建议改用jshint。

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

如果你正在编写一个库,我只建议在你的代码被封装到模块中时使用global strict,就像nodejs的情况一样。

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

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

请看Douglas Crockford的最新博客文章《严格模式即将到来》。

例子来自那篇文章:

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

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

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

片名:

/*jslint node: true */

JSHint:

/*jshint strict:false */

或者(如花蔽日)

/* jshint -W097 */

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

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

/* jshint node: true */