Jshint.com要求"严格使用".这是什么意思?

73 javascript jshint

Jshint.com提供错误:

第36行:var signin_found; 缺少"使用严格"声明.

Cza*_*zak 37

在js文件的顶部添加"use strict"(在.js文件的第1行):

"use strict";
...
function initialize_page()
{
    var signin_found;
    /*Used to determine which page is loaded / reloaded*/
    signin_found=document.getElementById('signin_button');
    if(signin_found) 
{
Run Code Online (Sandbox Code Playgroud)

有关stackoverflow的另一个问题中有关"use strict"的更多信息:

JavaScript中使用"严格"做什么,背后的原因是什么?

UPDATE.

jshint.com有问题,它要求你在每个函数中加入"use strict",但是应该允许它为每个文件全局设置它.

jshint.com认为这是错误的.

"use strict";    
function asd()
{
}
Run Code Online (Sandbox Code Playgroud)

但它没有任何问题......

它希望你对每个函数都使用"use strict":

function asd()
{
    "use strict";
}
function blabla()
{
    "use strict";
}
Run Code Online (Sandbox Code Playgroud)

然后它说:

做得好!JSHint没有发现您的代码有任何问题.

  • 实际上,一些(不正确的)脚本可能会尝试简单地连接多个脚本,导致代码不正确(非严格的代码严格执行).使代码严格按功能解决了这个问题. (21认同)
  • 捆绑工具来连接JS文件并导致此问题并不少见.实际上,您应该将整个文件包装在IIFE中以避免这种情况并意外地将变量放在全局范围内.有关如何执行此操作,请参阅@ lenrok7答案. (2认同)

Ant*_*yov 32

JSHint维护者在这里.

JSHint--网站上使用的版本 - 要求您在代码中使用功能级严格模式.关闭它很容易,只需取消选中"代码不在严格模式时警告"复选框:

jshint.com截图

为什么我们不允许@Czarek建议的全局严格模式?因为页面上使用的某些JavaScript文件可能不是我严格的模式兼容,而全局严格模式会破坏该代码.要使用全局严格模式,有一个名为的选项globalstrict.

希望有所帮助!


Kor*_*ski 10

我认为这是因为jshint试图"保护"我们免受意外分配严格模式到整个文件.最好用匿名函数包装代码,或使用某些命名空间.

例如,两者都在严格模式下运行

(function() {

   "use strict";

   function foo() {
        .....
   }

   function bar() {
        .....
   }
}());
Run Code Online (Sandbox Code Playgroud)


Mik*_*keD 5

JSlint 要求您的代码处于“严格模式”

为此,只需添加"use strict";到代码顶部即可。

  • 将代码包装在: `(function(){ "use strict"; //rest of your code }());` (2认同)