为啥 JSLint 会在这个函数上给出严格的违规错误?

Posted

技术标签:

【中文标题】为啥 JSLint 会在这个函数上给出严格的违规错误?【英文标题】:Why does JSLint give strict violation error on this function?为什么 JSLint 会在这个函数上给出严格的违规错误? 【发布时间】:2013-07-20 03:40:53 【问题描述】:

JSLint 给了我“严格违反”错误,尽管我在一个函数中使用了“this”上下文,将它隐藏在全局范围之外。

function test() 
    "use strict";
    this.a = "b";

作为记录,我使用 Webstorm 中内置的 JSLint 解析器。

【问题讨论】:

当我将此代码粘贴到 JSLint.com 时,所有默认选项都没有收到错误消息。更改函数名称将其删除的错误上下文是什么? 我正在使用 Webstorm,它可能有一个过时的 JSLint 版本 您是否有两个函数命名为test(在您的实时代码中)(相当于)?然后改变大小写会使它们变得不同。 【参考方案1】:

这是因为 JSLint 无法将您的函数识别为构造函数。按照惯例,您必须使用大写字母。

function Test() 
    "use strict";
    this.a = "b";

【讨论】:

你可以看看jshint.com。它提供了更多的控制,而不是将您锁定在由 Crockford 的意见而不是规范控制的选项中。你遇到的问题也发生在非构造函数上,如果你声明函数,你将把对象作为方法。 (例如,如果在您的function test()... 之后您有obj.test = test;,那么您最终得到了一个在test 属性上具有正确名称的函数,但由于IE 存在的问题而没有使用命名函数表达式。)

以上是关于为啥 JSLint 会在这个函数上给出严格的违规错误?的主要内容,如果未能解决你的问题,请参考以下文章

JSLint 严格违规。面向对象的 Javascript 挫折

使用此关键字和显示模块模式的严格违规

我应该担心“未定义窗口”JSLint 严格模式错误吗?

如何使用 jenkins 中的 jslint 和违规插件查找特定错误?

为啥 jslint 在模板字符串上抱怨 Unexpected '`'

为啥这个程序会在 C 中给出 Invalid memory access 错误? [关闭]