2013-07-21 19 views
7

JSLint gibt mir den Fehler "strikte Verletzung", obwohl ich den Kontext "this" innerhalb einer Funktion verwende, die es aus dem globalen Geltungsbereich verbirgt.Warum gibt JSLint einen strengen Verletzungsfehler für diese Funktion?

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

Für den Datensatz verwende ich den integrierten JSLint-Parser in Webstorm.

+0

Wenn ich diesen Code in JSLint.com, alle Standardoptionen einfügen, erhalte ich keinen Fehler. Was war der Kontext des Fehlers, in dem der Name der Funktion geändert wurde? – ruffin

+0

Ich benutze Webstorm, die vielleicht eine veraltete Version von JSLint hat –

+0

Jede Möglichkeit, die Sie haben zwei Funktionen namens (das Äquivalent von) 'test' (in Ihrem Live-Code)? Dann ändern sich die Fälle, wenn sie anders sind. – ruffin

Antwort

10

Dies liegt daran, dass JSLint Ihre Funktion als Konstruktor nicht erkennt. Per Konvention müssen Sie Großbuchstaben verwenden.

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

Sie können sich http://jshint.com anschauen. Es bietet mehr Kontrolle, anstatt Sie in Optionen einzuschließen, die von Crockfords Meinung gesteuert werden, anstatt von der Spezifikation. Das Problem, auf das Sie gestoßen sind, tritt auch bei Nicht-Konstruktoren auf, wenn Sie Funktionen deklarieren, die Sie als Methoden auf ein Objekt anwenden. (Zum Beispiel, wenn Sie nach Ihrem 'function test() {...}' 'obj.test = test;' hatten, so dass Sie eine Funktion mit einem richtigen Namen auf der 'test' -Eigenschaft erhielten, aber ohne a benannter Funktionsausdruck wegen der Probleme, die IE mit ihnen hat.) –