JSLint在遇到一个函数没有包含strict模式的声明,以及其祖先作用域中没有包含该声明时,会抛出"Missing 'use strict' statement"的错误。JSHint也会在相同情况下抛出错误,但是仅在strict选项设置为true的时候。以下是一个没有运行在strict模式下的函数:
这个错误抛出的主要原因是为了强调约定的缺失。但是随着JavaScript引擎的发展,这个错误会变得十分有用 -- 因为它会强调那些可能不会按照你所期望运行的代码区域,也许会产生一些致命的JavaScript错误。
"use strict"语句是一种可行的命令,它可以出现在一个程序或者一个函数的第一个语句 (ES5 §14.1):
A Directive Prologue is the longest sequence of ExpressionStatement productions occurring as the initial SourceElement productions of a Program or FunctionBody and where each ExpressionStatement in the sequence consists entirely of a StringLiteral token followed a semicolon. The semicolon may appear explicitly or may be inserted by automatic semicolon insertion. A Directive Prologue may be an empty sequence.
使用严格模式的命令可以让引擎遵循一个严格的语言子集,定义在 ES5 Annex C中。 对所有的JavaScript代码使用严格模式正在变成一种约定俗成,这也是为了防止掉入非严格模式下的语言陷阱。查阅相应的MDN文章以获取更多的在严格模式下的不同之处。
解决这个错误,你可以对函数或者其祖先函数添加使用严格模式的命令:
在JSHint1.0.0以及以上版本中,你可以通过一种特殊的语法选项来忽略其警告。但是这个消息在JShint中被当做一个错误,也就意味着你无法在让其不显示。