JSLint突然报告:使用“严格使用”的函数格式
我包括这样的陈述:
"use strict";
在我的大部分Javascript文件的开始。
JSLint以前从未对此提出警告。 但现在是这样说:
使用“使用严格”的函数forms。
有谁知道“function表”是什么?
包括'use strict';
作为包装函数中的第一个语句,所以它只影响该函数。 这可以防止连接不严格的脚本时出现问题。
请参阅道格拉斯·克罗克福德(Douglas Crockford)最新的博客文章严格模式即将到来 。
来自该post的示例:
(function () { 'use strict'; // this function is strict... }()); (function () { // but this function is sloppy... }());
更新:如果你不想立即function包装(例如,它是一个节点模块),那么你可以禁用警告。
对于JSLint (每Zhami ):
/*jslint node: true */
对于JSHint :
/*jshint strict:false */
或(每莱斯Shadeed )
/* jshint -W097 */
要禁用任何来自JSHint的任意警告,请检查JSHint源代码中的地图( 文档中的详细信息)。
更新2: JSHint支持node:boolean
选项。 请参阅github上的.jshintrc
。
/* jshint node: true */
如果你正在为NodeJS编写模块,它们已经被封装了。 告诉JSLint,通过在文件顶部包含节点来获取节点:
/*jslint node: true */
我build议使用jshint来代替。
它允许通过/*jshint globalstrict: true*/
来禁止这个警告。
如果你正在编写一个库,我只会build议使用全局严格的,如果你的代码被封装成模块,就像nodejs一样。
否则,你会强迫所有使用你的库的人进入严格模式。
stringforms没有天生的错误。
而不是避免“非全局”严格的forms,因为担心连接非严格的JavaScript,这可能是更好的只是修复该死的非严格的JavaScript是严格的。
我开始在跨平台JavaScript博客文章之后创build一个Node.js / browserify应用程序。 我遇到了这个问题,因为我的全新Gruntfile没有通过jshint。
幸运的是我在Leanpub关于Grunt的书中find了一个答案:
如果我们现在尝试,我们将扫描我们的Gruntfile …并得到一些错误:
$ grunt jshint Running "jshint:all" (jshint) task Linting Gruntfile.js...ERROR [L1:C1] W097: Use the function form of "use strict". 'use strict'; Linting Gruntfile.js...ERROR [L3:C1] W117: 'module' is not defined. module.exports = function (grunt) { Warning: Task "jshint:all" failed. Use --force to continue.
这两个错误都是因为Gruntfile是一个Node程序,默认情况下JSHint不能识别或者允许使用
module
和use strict
的string版本。 我们可以设置一个JSHint规则来接受我们的Node程序。 让我们编辑我们的jshint任务configuration并添加一个选项密钥:jshint: { options: { node: true }, }
添加node: true
对jshint options
为node: true
,将jshint放入“节点模式”,为我删除两个错误。
在项目的根目录下添加一个文件.jslintrc(如果是jshint,则为.jshintrc),内容如下:
{ "node": true }
我想每个人都想念这个问题的“突然”部分。 最有可能的是,你的.jshintrc有一个语法错误,所以它不包括“浏览器”行。 通过jsonvalidation器运行它,看看错误在哪里。
这是多么简单:如果你想严格所有的代码,添加"use strict";
在你的JavaScript的开始。
但是如果你只想对你的代码进行严格的处理,就使用函数表单。 无论如何,我会build议你在JavaScript的开始使用它,因为这将帮助你成为一个更好的编码器。