`jshint globalstrict:true`的目的是'使用严格的'

时间:2014-11-24 21:57:59

标签: javascript jshint

通常在阅读JavaScript源代码时,我会在顶部看到这两行。

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

现在,我非常清楚'use strict';的目的。 有人可以告诉我为什么要包含jshint globalstrict吗?

1 个答案:

答案 0 :(得分:5)

JSHint(从JSLint分叉)是一种受欢迎的" lint checker"这是在JavaScript代码上运行的。它不会执行或修改代码,但会对其进行分析并报告各种不同的潜在错误或错误做法。

如果您的JavaScript文件顶部有'use strict';,则在任何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';。您可以使用整个文件in a self-executing function来避免连接的副作用。

(function() {
  'use strict';

  window.permissions = null;

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

但是,如果您确定不需要担心串联并且不想修改代码,那么JSHint的globalstrict选项将禁用此警告。它使用.jshintrc文件或--config命令行标志来指定JSHint选项also possible,但在很多情况下,这是"内联配置"你看到 - 在文件中使用评论 - 是最简单的。

/* jshint globalstrict: true */