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

Я включаю заявление:

"use strict";

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

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

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

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

8 ответов


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

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

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

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

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

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

на JSLint (per Жами):

/*jslint node: true */

на JSHint:

/*jshint strict:false */

или (per Laith Shadeed)

/* jshint -W097 */

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

обновление 2: JSHint поддерживает . См..jshintrc at на GitHub.

/* jshint node: true */

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

/*jslint node: true */

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

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

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

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


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

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


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

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

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


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

{
    "node": true
}

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


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

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