959

私は声明を含めます:

"use strict";

私のJavascriptファイルのほとんどの先頭にあります。

JSLint は、これについて警告したことはありません。しかし今では、次のように言っています。

"use strict" の関数形式を使用します。

「関数形式」が何であるかを知っている人はいますか?

4

9 に答える 9

1035

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

Douglas Crockford の最新のブログ投稿Strict Mode Is Coming To Town を参照してください。

その投稿の例:

(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ます。.jshintrcgithub で参照してください。

/* jshint node: true */
于 2010-12-16T15:44:09.427 に答える
221

NodeJS 用のモジュールを作成している場合、それらは既にカプセル化されています。ファイルの先頭に含めることにより、ノードを取得したことを JSLint に伝えます。

/*jslint node: true */
于 2012-07-07T12:38:26.683 に答える
72

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

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

ライブラリを作成している場合、nodejs の場合のようにコードがモジュールにカプセル化されている場合にのみグローバルな strict を使用することをお勧めします。

そうしないと、ライブラリを使用しているすべての人を厳密モードに強制することになります。

于 2012-10-12T14:58:37.087 に答える
19

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.

module両方のエラーは、Gruntfile が Node プログラムであり、デフォルトで JSHint がの文字列バージョンを認識または使用できないためですuse strict。Node プログラムを受け入れる JSHint ルールを設定できます。jshint タスク構成を編集して、オプション キーを追加しましょう。

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

node: truejshintに追加して、 jshintoptionsを「ノードモード」にすると、両方のエラーが削除されました。

于 2014-05-31T07:46:05.943 に答える
18

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

{
    "node": true
}
于 2015-07-29T08:15:38.153 に答える
16

文字列形式に本質的な問題はありません。

非厳密な JavaScript を連結することを心配して「グローバル」な厳密な形式を避けるよりも、いまいましい非厳密な JavaScript を厳密に修正する方がよいでしょう。

于 2012-05-25T05:48:10.537 に答える
2
process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});

この行をファイルの開始点に追加します

于 2020-01-28T09:40:12.940 に答える
1

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

于 2015-09-13T16:58:04.767 に答える
-5

これは非常に簡単です。すべてのコードを厳密にしたい場合"use strict";は、JavaScriptの先頭に追加してください。

ただし、一部のコードのみを厳密にしたい場合は、関数フォームを使用してください。とにかく、JavaScriptの最初に使用することをお勧めします。これは、より優れたコーダーになるのに役立ちます。

于 2012-06-01T11:01:35.300 に答える