JSLint неожиданно сообщает: используйте форму функции «используйте строгий» - PullRequest
902 голосов
/ 16 декабря 2010

Я включаю утверждение:

"use strict";

в начале большинства моих файлов Javascript.

JSLint никогда раньше не предупреждал об этом. Но сейчас это так:

Использовать форму функции «используйте строгий».

Кто-нибудь знает, какой будет «форма функции»?

Ответы [ 8 ]

983 голосов
/ 16 декабря 2010

Включить 'use strict'; в качестве первого оператора в функции обтекания, чтобы оно влияло только на эту функцию. Это предотвращает проблемы при объединении скриптов, которые не являются строгими.

См. Последнее сообщение в блоге Дугласа Крокфорда Строгий режим приближается к городу .

Пример из этого поста:

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

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

Обновление: Если вы не хотите использовать непосредственную функцию (например, это модуль узла), вы можете отключить предупреждение.

Для JSLint (за Жами ):

/*jslint node: true */

Для JSHint :

/*jshint strict:false */

или (за Лейт Шейд )

/* jshint -W097 */

Чтобы отключить произвольное предупреждение от JSHint, проверьте карту в Исходный код JSHint (подробности в docs ).

Обновление 2: JSHint поддерживает параметр node:boolean. См .jshintrc на github .

/* jshint node: true */
216 голосов
/ 07 июля 2012

Если вы пишете модули для NodeJS, они уже инкапсулированы. Сообщите JSLint, что у вас есть узел, добавив в начало файла:

/*jslint node: true */
70 голосов
/ 12 октября 2012

Я бы предложил использовать jshint .

Это позволяет подавить это предупреждение с помощью /*jshint globalstrict: true*/.

Если вы пишете библиотеку, я быпредлагайте использовать глобальный строгий режим только в том случае, если ваш код инкапсулирован в модули, как в случае с nodejs.

В противном случае вы бы принудительно включили всех, кто использует вашу библиотеку, в строгий режим.

17 голосов
/ 31 мая 2014

Я начал создавать приложение Node.js / browserify после публикации в блоге Кросс-платформенный JavaScript .И я столкнулся с этой проблемой, потому что мой новый Gruntfile не прошел jshint.

К счастью, я нашел ответ в книге Leanpub по Grunt :

Если мы попробуем это сейчас, мы просканируем наш 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 является программой Node, и по умолчанию JSHint не распознает и не разрешает использованиеmodule и строковая версия use strict.Мы можем установить правило JSHint, которое будет принимать наши Node-программы.Давайте отредактируем конфигурацию задачи jshint и добавим ключ опций:

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

Добавление node: true к jshint options, чтобы перевести jshint в «режим узла», удалило обе ошибки для меня.

15 голосов
/ 29 июля 2015

Добавьте файл .jslintrc (или .jshintrc в случае jshint) в корневой каталог вашего проекта со следующим содержимым:

{
    "node": true
}
15 голосов
/ 25 мая 2012

В строковой форме нет ничего плохого.

Вместо того, чтобы избегать "глобальной" строгой формы для беспокойства о конкатенации нестрогого javascript, вероятно, лучше просто исправить чертовски нестрогий javascript, чтобы быть строгим.

0 голосов
/ 13 сентября 2015

Я думаю, что все пропустили "внезапно" часть этого вопроса. Скорее всего, ваш .jshintrc имеет синтаксическую ошибку, поэтому он не включает строку 'browser'. Запустите его через валидатор json, чтобы увидеть, где находится ошибка.

0 голосов
/ 01 июня 2012

Вот как это просто: если вы хотите быть строгим со всем своим кодом, добавьте "use strict"; в начале вашего JavaScript.

Но если вы хотите быть строгим только с некоторым кодом, используйте форму функции. В любом случае, я бы порекомендовал вам использовать его в начале вашего JavaScript, потому что это поможет вам стать лучшим программистом.

...