web-dev-qa-db-ja.com

JSLintが突然報告している: "use strict"の関数形式を使う

私は文を含める:

"use strict";

私のJavascriptファイルのほとんどの冒頭に。

JSLintはこれについて一度も警告していません。しかし今では、

関数形式 "use strict"を使用してください。

「関数形式」がどうなるか誰かが知っていますか?

894
Zhami

ラッピング関数の最初のステートメントとして'use strict';を含めるので、その関数にのみ影響します。これは厳密ではないスクリプトを連結するときの問題を防ぎます。

Douglas Crockfordによる最新のブログ投稿 厳密モードが街にやってくる を参照してください。

その投稿からの例:

(function () {
   'use strict';
   // this function is strict...
}());

(function () {
   // but this function is sloppy...
}());

更新: もしあなたが即時関数をラップしたくない場合(例えばそれがノードモジュールである場合)、あなたは警告を無効にすることができます。

JSLint Zhami ごと):

/*jslint node: true */

JSHint の場合:

/*jshint strict:false */

または( Laith Shadeed ごと)

/* jshint -W097 */

JSHintからの任意の警告を無効にするには、 JSHintソースコード (詳細は docs )のマップを確認してください。

更新2: JSHint node:booleanオプションをサポートします。 githubの.jshintrc を参照してください。

/* jshint node: true */
979
bdukes

NodeJS用のモジュールを書いているのなら、それらはすでにカプセル化されています。ファイルの先頭にインクルードしてnodeがあることをJSLintに伝えます。

/*jslint node: true */
216
Zhami

代わりに jshint を使用することをお勧めします。

/*jshint globalstrict: true*/を介してこの警告を抑制することができます。

もしあなたがライブラリを書いているのであれば、nodejsのようにあなたのコードがモジュールにカプセル化されている場合にのみglobal strictを使うことをお勧めします。

そうでなければ、あなたはあなたのライブラリーを使用している人全員を厳密モードに強制します。

70
Thorsten Lorenz

Cross Platform JavaScript ブログ投稿に従ってNode.js/browserifyアプリケーションの作成を始めました。私のブランドの新しいGruntfileがjshintに合格しなかったため、私はこの問題に遭遇しました。

幸いなことに私はGruntの Leanpubの本の中で答えを見つけました

今すぐ試すと、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の使用を認識または許可していないためです。 Nodeプログラムを受け付けるJSHintルールを設定できます。 jshintタスク設定を編集してオプションキーを追加しましょう。

jshint: {
  options: {
    node: true
  },
}

Jshintを「ノードモード」にするために、jshintのoptionsnode: trueを追加すると、両方のエラーが削除されました。

16
qris

文字列形式に本質的に問題のあるものは何もありません。

厳密ではないjavascriptを連結することを心配するために "グローバルな"厳密な形式を避けるのではなく、いまいましい厳密ではないjavascriptを厳密に固定することをお勧めします。

15
glycoslave

プロジェクトのルートに.jslintrcファイル(またはjshintの場合は.jshintrc)を追加して、次の内容を追加します。

{
    "node": true
}
14
Sahil Ahuja

誰もがこの質問の「突然」の部分を見逃したと思います。ほとんどの場合、あなたの.jshintrcには構文エラーがあるので、 'browser'行は含まれていません。エラーがどこにあるか見るためにjsonバリデータを通してそれを実行してください。

0
Dirigible