Javascript JSLint正在突然报告:使用函数形式";使用“严格的”;

Javascript JSLint正在突然报告:使用函数形式";使用“严格的”;,javascript,jslint,Javascript,Jslint,我包括以下声明: "use strict"; 在我的大多数Javascript文件的开头 JSLint以前从未警告过这一点。但现在它是这样说的: 使用“严格使用”的函数形式 有人知道“函数形式”是什么吗?包括'use strict'作为包装函数中的第一条语句,因此它只影响该函数。这可以防止在连接不严格的脚本时出现问题 请参阅道格拉斯·克罗克福德的最新博文 该职位的例子: (function () { 'use strict'; // this function is strict.

我包括以下声明:

"use strict";
在我的大多数Javascript文件的开头

JSLint以前从未警告过这一点。但现在它是这样说的:

使用“严格使用”的函数形式


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

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

请参阅道格拉斯·克罗克福德的最新博文

该职位的例子:

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

(function () {
   // but this function is sloppy...
}());
更新: 如果您不想包装立即功能(例如,它是一个节点模块),则可以禁用警告

对于JSLint(per):

对于JSHint

/*jshint strict:false */
或(每)

要禁用JSHint中的任意警告,请检入映射(中的详细信息)

更新2:JSHint支持
node:boolean
选项。看


字符串形式没有天生的错误


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

这就是它的简单之处:如果你想对所有代码严格要求,添加
“使用严格”在JavaScript的开头


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

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

/*jslint node: true */
我建议改用

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

如果您正在编写一个库,我只建议在您的代码像nodejs那样封装到模块中时使用globalstrict


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

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

幸运的是,我找到了一个答案:

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

$ 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.
这两个错误都是因为Grunfile是一个节点程序,默认情况下JSHint不识别或不允许使用
模块
的字符串版本使用strict
。我们可以设置一个JSHint规则来接受我们的节点程序。让我们编辑jshint任务配置并添加一个选项键:

jshint: {
  options: {
    node: true
  },
}
node:true
添加到jshint
选项中,将jshint置于“节点模式”,为我删除了这两个错误。

在项目的根目录下添加一个文件.jslintrc(或.jshintrc,在jshint的情况下)并包含以下内容:

{
    "node": true
}

我想每个人都错过了这个问题的“突然”部分。最有可能的是,您的.jshintrc有语法错误,因此不包括“browser”行。通过json验证程序运行它,查看错误在哪里

process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});

将这些行添加到文件的起点处

FYI:JSHint中的globalstrict选项已更改。现在试试
strict:'global'
,看看我在只放置
的“use strict”时是否真的出现了这个错误位于我的JS文件的顶部,所以这可能不是完全正确的。@moesef这是因为您的代码中有错误。它只是为了帮助您提高编码技能,减少代码的“松散”。。。它不会接受未声明的变量等。@JasonStackhouse:不正确。JSLint不会接受
“use strict”的“global”形式,它只是放在代码的顶部。它仅允许在包装到函数中时使用strict;“
。(不过,JS_Hint_uu允许您使用全局表单——有关所需的设置,请参见上面的答案)。在VisualStudio的JSLint中,它的选项是:“允许全局ES5严格”,但这对节点应用程序没有意义<代码>-1
你好,尼科,我更新了答案,对于节点,您可以键入:/*jshint-W097*/来禁用此选项warning@LaithShadeed另一种选择是
/*jshint strict:false*/
,以更清楚地说明您在做什么(除非您的数字代码有我不知道的特殊好处)@本体它不是真正的样板文件,它是一个改变代码运行环境的指令。这就是说,新的ES6语法(模块和类)在默认情况下是严格的(请参阅),因此今后不需要到处乱丢。同时,您可以将所有代码包装在一个文件中,只需指定
“use strict”
per file.FYI一次,此选项适用于JSLint,但JSHint不会使用此指令关闭严格性警告。对于JSHint,请尝试使用JSHint v2.9.2为我编写的
/*JSHint strict:false*/
。在.jshintrcNo中添加了
“node”:true
,这是突然发生的,因为在线JSLint服务在2010年被问到这个问题时添加了该功能。
jshint: {
  options: {
    node: true
  },
}
{
    "node": true
}
process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});