Почему JSLint выдает ошибку строгого нарушения этой функции?

JSLint выдает ошибку «строгое нарушение», хотя я использую контекст «этот» внутри функции, которая скрывает его от глобальной области видимости.

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

Для справки, я использую встроенный анализатор JSLint в Webstorm.


person Erik Bergstedt    schedule 21.07.2013    source источник
comment
Когда я вставляю этот код в JSLint.com со всеми параметрами по умолчанию, я не получаю сообщения об ошибке. Каков был контекст ошибки, когда изменение имени функции удалило ее?   -  person ruffin    schedule 22.07.2013
comment
Я использую Webstorm, который, возможно, имеет устаревшую версию JSLint.   -  person Erik Bergstedt    schedule 22.07.2013
comment
Есть ли шанс, что у вас есть две функции с именем (эквивалент) test (в вашем реальном коде)? Тогда изменение регистра сделало бы их разными.   -  person ruffin    schedule 22.07.2013


Ответы (1)


Это связано с тем, что JSLint не распознает вашу функцию как конструктор. По соглашению вы должны использовать заглавные буквы.

function Test() {
    "use strict";
    this.a = "b";
}
person Erik Bergstedt    schedule 21.07.2013
comment
Вы можете посмотреть на jshint.com. Он предлагает больше контроля, а не блокирует вас в вариантах, контролируемых мнением Крокфорда, а не спецификацией. Проблема, с которой вы столкнулись, также возникает с не-конструкторами, если вы объявляете функции, которые вы собираетесь поместить в объект как методы. (Например, если после вашего function test(){...} у вас было obj.test = test;, вы получили функцию с правильным именем в свойстве test, но без использования выражения именованной функции из-за проблем, с которыми сталкивается IE.) - person T.J. Crowder; 21.07.2013