为什么JSLint在这个函数上会给出严格违例错误?

7

JSLint给我报了“strict violation(严格模式违规)”的错误,尽管我在一个函数中使用了“this”上下文,将其隐藏在全局范围之外。

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

就记录而言,我在Webstorm中使用内置的JSLint解析器。


当我将这段代码粘贴到JSLint.com中,使用所有默认选项时,我没有收到错误。更改函数名称后,错误的上下文是什么? - ruffin
我正在使用Webstorm,可能有一个过时的JSLint版本。 - Erik Bergstedt
你的实际代码中有没有两个函数名相同(等价于)test的函数?如果有,改变大小写会使它们不同。 - ruffin
1个回答

10

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

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

4
你可以查看 http://jshint.com。它提供更多控制,而不是将你锁定在由 Crockford 的观点而非规范控制的选项中。如果你要声明要作为对象方法放置的函数,则会发生与非构造函数相同的问题。(例如,如果在你的 function test(){...} 后面添加了 obj.test = test;,那么你就会在 test 属性上得到一个具有正确名称的函数,但没有使用命名函数表达式,因为 IE 存在这方面的问题。) - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接