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, потому что это поможет вам стать лучшим кодером.