JSLint 突然报错:使用“use strict”的函数形式

IT技术 javascript jslint
2021-01-27 19:45:28

我包括以下声明:

"use strict";

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

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

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

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

6个回答

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

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

该帖子中的示例:

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

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

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

对于JSLint(每个Zhami):

/*jslint node: true */

对于JSHint

/*jshint strict:false */

或(根据Laith Shadeed

/* jshint -W097 */

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

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

/* jshint node: true */
嗨 Nico,我更新了答案,对于节点,您可以输入:/* jshint -W097 */ 以禁用此警告
2021-04-01 19:45:28
在 Visual Studio 的 JSLint 中,它是一个选项:“允许全局 ES5 严格”
2021-04-03 19:45:28
@LaithShadeed 另一种选择是/*jshint strict:false */,让您更清楚地了解您在做什么(除非您的数字代码有我不知道的特殊好处)
2021-04-03 19:45:28
但是,这对 Node 应用程序没有意义。 -1
2021-04-12 19:45:28
@Noumenon 它并不是真正的样板文件,它是一个改变代码运行环境的指令。也就是说,默认情况下,新的 ES6 语法(module和类)是严格的(请参阅ecma-international.org/ecma-262/6.0/ #sec-strict-mode-code),所以今后不需要到处乱扔垃圾。同时,您可以将所有代码包装在IIFE 中"use strict";每个文件只需指定一次。
2021-04-13 19:45:28

如果您正在为 NodeJS 编写module,那么它们已经被封装了。通过在文件的顶部包含来告诉 JSLint 你有节点:

/*jslint node: true */
仅供参考,此选项适用于 JSLint,但 JSHint 不会关闭此指令的严格警告。对于 JSHint,请尝试/*jshint strict:false */
2021-03-18 19:45:28
用 JSHint v2.9.2 为我写的。添加"node": true到 .jshintrc
2021-04-04 19:45:28

我建议改用jshint

它允许通过/*jshint globalstrict: true*/.

如果您正在编写一个库,我只建议在您的代码像 nodejs 一样封装到module中时使用 global strict。

否则你会强制每个使用你的库的人进入严格模式。

仅供参考:JSHint 中的 globalstrict 选项已更改。立即尝试strict: 'global',并查看jshint.com/docs/options/#globalstrict
2021-04-07 19:45:28

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

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

如果我们现在尝试,我们将扫描我们的 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是节点计划,并默认JSHint不承认或允许使用的module和的字符串版本use strict我们可以设置一个 JSHint 规则来接受我们的 Node 程序。让我们编辑我们的 jshint 任务配置并添加一个选项键:

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

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

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

{
    "node": true
}