Цел на `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
so globalstrict: true ще потисне предупрежденията, които „use strict“ иначе би докладвало? - person runtimeZero; 27.11.2014
comment
Почти. Той ще потисне предупрежденията, които JSHint иначе би докладвал about 'use strict'. - person Jeremy; 27.11.2014