JSLint неожиданно сообщает: используйте форму функции "use strict"

Я включаю оператор:

"use strict";

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

JSLint никогда не предупреждал об этом. Но теперь это, говоря:

Используйте форму функции "use strict".

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

Ответы

Ответ 1

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

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

Пример из этого сообщения:

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

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

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

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

/*jslint node: true */

Для JSHint:

/*jshint strict:false */

или (за Laith Shadeed)

/* jshint -W097 */

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

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

/* jshint node: true */

Ответ 2

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

/*jslint node: true */

Ответ 3

Вместо этого предлагаю использовать jshint.

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

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

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

Ответ 4

В строковой форме нет ничего врожденного.

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

Ответ 5

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

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

Если мы попробуем это сейчас, мы сканируем наш файл Grunt... и получим некоторые ошибки:

$ 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 в режим Node, удалил обе ошибки для меня.

Ответ 6

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

{
    "node": true
}

Ответ 7

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

Ответ 8

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

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