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



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



"use strict";


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



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




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




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

779   8  

8 ответов:

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

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

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

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

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

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

на JSLint (per Жами):

/*jslint node: true */

на JSHint:

/*jshint strict:false */

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

Comments

    Ничего не найдено.