Назначение `jshint globalstrict: true` с 'use strict'

Часто при чтении исходного кода JavaScript я вижу эти две строки вместе вверху.

/* jshint globalstrict: true */
'use strict';

Теперь я очень хорошо знаю цель 'use strict';. Может кто-нибудь просветить меня, почему jshint globalstrict включен?


person runtimeZero    schedule 24.11.2014    source источник


Ответы (1)


JSHint (форк от JSLint) – это популярная "проверка ворсинок", которая запускается в коде JavaScript. Он не выполняет и не модифицирует код, а анализирует его и сообщает о множестве различных потенциальных ошибок или неправильных действий, которые обнаруживает.

Если у вас есть 'use strict'; в верхней части вашего файла JavaScript, за пределами каких-либо функций JavaScript, это включит строгий режим для всего файла. По умолчанию JSHint сообщит о предупреждении, если увидит это.

'use strict';

window.permissions = null;

function initialize() {
  window.permissions = 0;
}
Warnings
1: Use the function form of "use strict".

Это связано с тем, что многие люди автоматически объединяют свои файлы JavaScript перед отправкой их пользователю, и в этих случаях 'use strict;' верхнего уровня может вызвать ошибки. Например, если у вас есть 'use strict'; в верхней части main.js, и он связан с нестрогим режимом controls.js, строгий режим также будет непреднамеренно применен к коду из controls.js, потенциально изменяя его поведение.

// This code is fine on its own, but will break if strict mode is applied.
document.querySelector('.upgade').onclick = function() {
  window.permissions = 0777;
}

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

(function() {
  'use strict';

  window.permissions = null;

  function initialize() {
    window.permissions = 0;
  }
}());

Однако, если вы уверены, что вам не нужно беспокоиться о конкатенации и не хотите изменять свой код, globalstrict для JSHint отключит это предупреждение. также возможно указать параметры JSHint с помощью файла .jshintrc или флага командной строки --config, но в во многих случаях эта «встроенная конфигурация», которую вы видели, — с использованием комментария в файле — является самой простой.

/* jshint globalstrict: true */
person Jeremy    schedule 27.11.2014
comment
поэтому globalstrict: true будет подавлять предупреждения, о которых в противном случае сообщалось бы «use strict»? - person runtimeZero; 27.11.2014
comment
Довольно много. Он подавляет предупреждения, которые JSHint в противном случае сообщал бы о 'use strict'. - person Jeremy; 27.11.2014