8629
22093
最近、JavaScriptコードの一部をCrockfordのJSLintで実行したところ、次のエラーが発生しました。
1行目の文字1の問題:「usestrict」ステートメントがありません。
調べてみると、「厳密に使う」という人もいることに気づきました。 JavaScriptコードに。ステートメントを追加すると、エラーが表示されなくなりました。残念ながら、Googleはこの文字列ステートメントの背後にある歴史の多くを明らかにしませんでした。確かに、JavaScriptがブラウザーによってどのように解釈されるかと関係があるはずですが、その効果がどうなるかはわかりません。
つまり、「厳密に使用する」とは何ですか。すべてについて、それは何を意味しますか、そしてそれはまだ関連していますか?
現在のブラウザのいずれかが「厳密に使用」に応答しますか。文字列ですか、それとも将来の使用のためですか? 
Javascript Strict Modeに関するこの記事は、興味があるかもしれません:John Resig-ECMAScript 5 Strict Mode、JSONなど
いくつかの興味深い部分を引用するには:
厳密モードはECMAScript5の新機能であり、プログラムまたは関数を「厳密な」操作コンテキストに配置できます。この厳密なコンテキストにより、特定のアクションが実行されなくなり、より多くの例外がスローされます。
そして:
厳密モードは、いくつかの点で役立ちます。
いくつかの一般的なコーディングNG集をキャッチし、例外をスローします。
比較的「安全でない」アクション(グローバルオブジェクトへのアクセスの取得など)が実行された場合に、エラーを防止またはスローします。
混乱したり、よく考えられていない機能を無効にします。
また、ファイル全体に「厳密モード」を適用できることにも注意してください...または、特定の機能にのみ使用できます(John Resigの記事から引用しています)。
//非厳密なコード...
(関数(){
"厳密に使用";
//ライブラリを厳密に定義します...
})();
//非厳密なコード...
古いコードと新しいコードを混在させる必要がある場合、これは役立つかもしれません;-)
つまり、Perlで使用できる「usestrict」に少し似ていると思います(そのため、名前は?)。破損につながる可能性のあるものをより多く検出することで、エラーを減らすのに役立ちます。
厳密モードは、すべての主要なブラウザーでサポートされるようになりました。
ネイティブECMAScriptモジュール(インポートおよびエクスポートステートメントを含む)およびES6クラス内では、厳密モードは常に有効であり、無効にすることはできません。
|
これはECMAScript5の新機能です。JohnResigがその要約を書きました。
これは、JavaScriptファイル(ファイルの先頭または関数内)に入力する文字列であり、次のようになります。
"厳密に使用";
これをコードに入れても、文字列にすぎないため、現在のブラウザで問題が発生することはありません。コードがプラグマに違反している場合、将来的にコードに問題が発生する可能性があります。たとえば、最初にfooを定義せずに現在foo = "bar"を使用している場合、コードは失敗し始めます...これは私の意見では良いことです。
|
「厳密に使用する」というステートメント。 JavaScriptの縮小されたより安全な機能セットであるStrictモードを使用するようにブラウザに指示します。
機能のリスト(網羅的ではありません)
グローバル変数を禁止します。 (変数名で欠落しているvar宣言とタイプミスをキャッチします)
サイレントに失敗した割り当ては、厳密モードでエラーをスローします(NaN = 5を割り当てます;)
削除できないプロパティを削除しようとすると、スローされます(Object.prototypeを削除します)
オブジェクトリテラル内のすべてのプロパティ名が一意である必要があります(var x = {x1: "1"、x1: "2"})
関数のパラメーター名は一意である必要があります(関数の合計(x、x){...})
8進構文を禁止します(var x = 023;一部の開発者は、先行するゼロは数値を変更しないと誤って想定しています。)
withキーワードを禁止します
strictモードでのevalは新しい変数を導入しません
プレーン名の削除を禁止します(xを削除;)
任意の形式でevalおよびargumentsという名前のバインドまたは割り当てを禁止します
厳密モードでは、引数オブジェクトのプロパティを仮パラメーターでエイリアスしません。 (つまり、関数sum(a、b){return arguments [0] + b;}これは、arguments [0]がaなどにバインドされているために機能します。)
arguments.calleeはサポートされていません
[参照:厳密モード、Mozilla Developer Network]
|
厳密な使用を心配している人は、この記事をチェックする価値があるかもしれません。
ECMAScript5ブラウザでの「厳密モード」のサポート。これはどういう意味ですか?NovoGeek.com-クリシュナのウェブログ
それはブラウザのサポートについて話しますが、もっと重要なのはそれを安全に扱う方法です:
関数isStrictMode(){
返す!this;
}
/ *
'this'はグローバルオブジェクトを参照し、
'!this'はfalseになります
* /
関数isStrictMode(){
"厳密に使用";
返す!this;
}
/ *
厳密モードではキーワード「this」がtrueを返します。
従来のJSとは異なり、グローバルオブジェクトを参照しません。
したがって、ここでは、「this」は「undefined」であり、「!this」はtrueになります。
* /
|
注意点として、プログラマーに負担をかけているのは、既存のコードに「厳密に使用」を適用すると危険な場合があるということです。これは、コードを「より良く」するためにコードを叩くことができる、心地よい、幸せそうな顔のステッカーではありません。 「usestrict」プラグマを使用すると、ブラウザは、デフォルト/ルーズJavaScriptで問題なく許可されているが、厳密なJavaScriptが嫌いなことをしているという理由だけで、これまでスローされなかった例外をランダムな場所に突然スローします。コード内でめったに使用されない呼び出しに隠れている厳密性違反がある可能性があります。これは、最終的に実行されたときにのみ例外をスローします。たとえば、有料の顧客が使用する本番環境では!
思い切って取り組む場合は、包括的な単体テストと厳密に構成されたJSHintビルドタスクとともに「usestrict」を適用することをお勧めします。これにより、モジュールの暗いコーナーが爆発することはありません。厳密モードをオンにしたという理由だけで恐ろしくなります。または、別のオプションがあります。レガシーコードに「usestrict」を追加しないでください。正直なところ、その方がおそらく安全です。所有していないモジュールや所有していないモジュールに「usestrict」を追加しないでください。サードパーティのモジュールのように維持します。
致命的な檻に入れられた動物ですが、「厳格に使用する」ことは良いことかもしれませんが、あなたはそれを正しくしなければなりません。厳密にするのに最適な時期は、プロジェクトがグリーンフィールドであり、ゼロから始めているときです。 JSHint / JSLintを構成し、すべての警告とオプションをチームが可能な限り厳しく調整し、Grunt + Karma + Chaiのように適切なビルド/テスト/アサートシステムを装備すると、すべての新しいモジュールを「 strictを使用してください」。ぎこちないエラーや警告をたくさん治す準備をしてください。 JSHint / JSLintが違反を生成した場合にビルドを失敗するように構成して、全員が重力を理解していることを確認してください。
「usestrict」を採用したとき、私のプロジェクトはグリーンフィールドプロジェクトではありませんでした。その結果、モジュールの半分に「厳密な使用」がないため、IDEは赤いマークでいっぱいになり、JSHintはそれについて不平を言います。これは、将来どのようなリファクタリングを行うべきかを思い出させるものです。私の目標は、「厳密に使用する」という記述がすべて欠落しているためにレッドマークをなくすことですが、それはもう何年も先のことです。
|
'usestrict'を使用します。突然コードが改善されることはありません。
JavaScriptのstrictモードは、ECMAScript 5の機能です。スクリプト/関数の先頭でこれを宣言することにより、strictモードを有効にできます。
'厳密に使用';
JavaScriptエンジンはこのディレクティブを認識すると、特別なモードでコードの解釈を開始します。このモードでは、潜在的なバグになる可能性のある特定のコーディング手法が検出されると、エラーがスローされます(これがstrictモードの背後にある理由です)。
この例を考えてみましょう。
var a = 365;
var b = 030;
開発者は、数値リテラルを整列させることに執着しているため、変数bを8進数のリテラルで誤って初期化しました。非厳密モードは、これを値24(基数10)の数値リテラルとして解釈します。ただし、strictモードではエラーがスローされます。
厳密モードの専門分野の網羅的でないリストについては、この回答を参照してください。
どこで「usestrict」を使用すればよいですか?
私の新しいJavaScriptアプリケーションでは:もちろんです!厳密モードは、コードで愚かなことをしているときに内部告発者として使用できます。
私の既存のJavaScriptコードでは:おそらくそうではありません!既存のJavaScriptコードに、strictモードで禁止されているステートメントが含まれている場合、アプリケーションは単に壊れます。厳密モードが必要な場合は、既存のコードをデバッグして修正する準備をしておく必要があります。これが、「usestrict」を使用する理由です。突然コードが改善されることはありません。
厳密モードを使用するにはどうすればよいですか?
'usestrict'を挿入します;スクリプトの上にあるステートメント:
//ファイル:myscript.js
'厳密に使用';
var a = 2;
...。
myscript.jsファイル内のすべてが厳密モードで解釈されることに注意してください。
または、「usestrict」を挿入します。関数本体の上のステートメント:
関数doSomething(){
'厳密に使用';
..。
}
関数doSomethingの字句スコープ内のすべては、厳密モードで解釈されます。ここでは、字句スコープという単語が重要です。たとえば、strictコードがstrictではないライブラリの関数を呼び出す場合、コードのみがstrictモードで実行され、呼び出された関数は実行されません。より良い説明については、この回答を参照してください。
厳密モードで禁止されていることは何ですか?
strictモードで禁止されているいくつかのことを説明する素晴らしい記事を見つけました(これは排他的なリストではないことに注意してください):
範囲
歴史的に、JavaScriptはどのように機能するかについて混乱してきました
スコープが設定されています。静的にスコープされているように見えることもありますが、
機能により、動的にスコープされているように動作します。これは
混乱し、プログラムを読みにくく、理解しにくくします。
誤解はバグを引き起こします。パフォーマンスの問題でもあります。
静的スコープにより、コンパイル時に変数バインディングを実行できます
時間ですが、動的スコープの要件は、バインディングが
実行時に延期され、パフォーマンスが大幅に向上します
ペナルティ。
厳密モードでは、すべての変数バインディングを静的に実行する必要があります。
つまり、以前は動的バインディングが必要だった機能
削除または変更する必要があります。具体的には、withステートメントは
排除され、eval関数が
発信者の環境は厳しく制限されています。
厳密なコードの利点の1つは、YUICompressorなどのツールです。
それを処理するとき、より良い仕事をすることができます。
暗黙のグローバル変数
JavaScriptはグローバル変数を暗示しています。場合
変数を明示的に宣言しない場合、グローバル変数は
暗黙的に宣言されています。これにより、プログラミングが容易になります。
彼らは彼らの基本的なハウスキーピングのいくつかを無視することができるので初心者
雑用。しかし、それはより大きなプログラムの管理をはるかに多くします
困難であり、信頼性が大幅に低下します。だから厳密に
モードでは、暗黙のグローバル変数は作成されなくなりました。あなたがすべき
すべての変数を明示的に宣言します。
グローバルリーク
これを引き起こす可能性のある多くの状況があります
グローバルオブジェクトにバインドされます。たとえば、忘れた場合
コンストラクターを呼び出すときに新しいプレフィックスを指定します機能、
コンストラクターのこれは予期せずグローバルオブジェクトにバインドされるため、
新しいオブジェクトを初期化する代わりに、サイレントになります
グローバル変数の改ざん。これらの状況では、厳密モードは
代わりに、これをundefinedにバインドします。これにより、コンストラクターは
代わりに例外をスローして、エラーを多く検出できるようにします
より早く。
騒々しい失敗
JavaScriptには常に読み取り専用のプロパティがありますが、
ES5のObject.createPropertyまで、自分で作成することはできませんでした
関数はその機能を公開しました。値を割り当てようとした場合
読み取り専用プロパティに対しては、サイレントに失敗します。割り当ては
プロパティの値を変更しませんが、プログラムは次のように進行します
持っていたのに。これは完全性の危険であり、プログラムが
一貫性のない状態になります。厳密モードで、変更を試みる
読み取り専用プロパティは例外をスローします。
オクタル
数値の8進数(または8進数)表現は非常に優れていました
単語がその単語のマシンでマシンレベルのプログラミングを行うときに便利
サイズは3の倍数でした。CDCで作業するときは8進数が必要でした
ワードサイズが60ビットの6600メインフレーム。あなたが読むことができれば
8進数では、単語を20桁と見なすことができます。 2桁の数字
オペコード、および1桁で8つのレジスタの1つを識別しました。間に
機械語から高級言語への移行が遅い、
プログラミング言語で8進形式を提供するのに役立つと考えられています。
Cでは、オクタルネスの非常に不幸な表現は
選択済み:先行ゼロ。したがって、Cでは、0100は100ではなく64を意味し、08は
エラー、8ではありません。さらに残念なことに、この時代錯誤は
JavaScriptを含むほぼすべての現代言語にコピーされました。
エラーを作成するためにのみ使用されます。他の目的はありません。だからで
厳密モードでは、8進形式は使用できなくなりました。
など
引数の疑似配列はもう少しなります
ES5の配列のようなもの。厳密モードでは、呼び出し先と呼び出し元を失います
プロパティ。これはあなたの議論を信頼できない人に渡すことを可能にします
多くの機密コンテキストをあきらめることなくコード。また、
関数のargumentsプロパティが削除されます。
厳密モードでは、関数リテラルでキーが重複すると、
構文エラー。関数に同じ名前の2つのパラメーターを含めることはできません。
関数は、その関数の1つと同じ名前の変数を持つことはできません
パラメーター。関数はそれ自体の変数を削除できません。する試み
構成不可能なプロパティを削除すると、例外がスローされるようになりました。プリミティブ
値は暗黙的にラップされません。
将来のJavaScriptバージョン用の予約語
ECMAScript 5は、予約語のリストを追加します。それらを変数または引数として使用する場合、strictモードはエラーをスローします。予約語は次のとおりです。
実装、インターフェース、let、パッケージ、プライベート、保護、パブリック、静的、およびyield
参考文献
厳密モード-JavaScript | MDN
ストリクトモードのブラウザサポート
ストリクトモードへの移行
|
今すぐ厳密モードの使用を開始することをすべての開発者に強くお勧めします。それをサポートするブラウザは十分にあるので、厳密モードを使用すると、コードに含まれていることすら知らなかったエラーから合法的に救うことができます。
どうやら、初期段階では、これまでに遭遇したことのないエラーが発生するでしょう。最大限のメリットを得るには、厳密モードに切り替えた後に適切なテストを実行して、すべてをキャッチしたことを確認する必要があります。間違いなく、コードでuse strictをスローするだけでなく、エラーがないと想定しています。つまり、チャーンは、この非常に便利な言語機能を使用して、より優れたコードを記述し始めるときです。
例えば、
var person = {
名前: 'xyz'、
位置: 'abc'、
フルネーム:function(){"use strict"; this.nameを返します。 }
};
JSLintは、DouglasCrockfordによって作成されたデバッガーです。スクリプトを貼り付けるだけで、コード内の目立った問題やエラーをすばやくスキャンできます。
|
他の回答を補完する、もう少し根拠のある回答を提供したいと思います。最も人気のある回答を編集したいと思っていましたが、失敗しました。私はそれをできるだけ包括的で完全なものにしようとしました。
詳細については、MDNのドキュメントを参照してください。
ECMAScript5で導入されたディレクティブ「usestrict」。
ディレクティブはステートメントに似ていますが、異なります。
use strictにはキーワードが含まれていません。ディレクティブは、特殊な文字列リテラル(一重引用符または二重引用符)で構成される単純な式ステートメントです。 ECMAScript 5を実装していないJavaScriptエンジンは、副作用のない式ステートメントを表示するだけです。 ECMAScript標準の将来のバージョンでは、実際のキーワードとしての使用が導入されることが予想されます。これにより、引用符は廃止されます。
use strictは、スクリプトまたは関数の先頭でのみ使用できます。つまり、他のすべての(実際の)ステートメントの前に置く必要があります。関数のスクリプトの最初の命令である必要はありません。文字列リテラル(およびJavaScript)で構成される他のステートメント式を前に付けることができます。実装はそれらを実装固有のディレクティブとして扱うことができます)。 (スクリプトまたは関数内の)最初の実際のステートメントに続く文字列リテラルステートメントは、単純な式ステートメントです。通訳者はそれらを指令として解釈してはならず、効果はありません。
use strictディレクティブは、次のコード(スクリプトまたは関数内)がstrictコードであることを示します。
スクリプトの最上位レベルのコード(関数にないコード)は、スクリプトにuse strictディレクティブが含まれている場合、厳密なコードと見なされます。
関数自体が厳密なコードで定義されている場合、または関数にuse strictディレクティブが含まれている場合、関数の内容は厳密なコードと見なされます。
eval()メソッドに渡されるコードは、eval()が厳密なコードから呼び出された場合、またはuse strictディレクティブ自体を含む場合、厳密なコードと見なされます。
ECMAScript 5のstrictモードは、JavaScript言語の制限付きサブセットであり、言語の関連する欠陥を排除し、より厳格なエラーチェックとより高いセキュリティを備えています。以下に、厳密モードと通常モードの違いを示します(最初の3つは特に重要です)。
厳密モードではwithステートメントを使用できません。
厳密モードでは、すべての変数を宣言する必要があります。グローバルオブジェクトの変数、関数、関数パラメーター、catch-clauseパラメーター、またはプロパティとして宣言されていない識別子に値を割り当てると、ReferenceErrorが発生します。通常モードでは、識別子は(グローバルオブジェクトのプロパティとして)グローバル変数として暗黙的に宣言されます。
厳密モードでは、キーワードthisは、(メソッドとしてではなく)関数として呼び出された関数で未定義の値を持ちます。 (通常モードでは、これは常にグローバルオブジェクトを指します)。この違いを使用して、実装が厳密モードをサポートしているかどうかをテストできます。
var hasStrictMode =(function(){"use strict"; return this === undefined}());
また、関数がcall()で呼び出されるか、strictモードで適用される場合、これは正確にcall()またはapply()呼び出しの最初の引数の値です。 (通常モードでは、nullとundefinedはグローバルオブジェクトに置き換えられ、オブジェクトではない値がオブジェクトにキャストされます。)
厳密モードでは、読み取り専用プロパティに割り当てようとしたり、拡張不可能なオブジェクトの新しいプロパティを定義しようとすると、TypeErrorが発生します。 (通常モードでは、どちらもエラーメッセージなしで失敗します。)
strictモードでは、コードをeval()に渡すときに、呼び出し元のスコープ内で変数または関数を宣言または定義することはできません(通常モードで実行できるため)。代わりに、eval()の新しいスコープが作成され、変数と関数はそのスコープ内にあります。そのスコープは、eval()が実行を終了した後に破棄されます。
厳密モードでは、関数のarguments-objectには、その関数に渡される値の静的コピーが含まれます。通常モードでは、arguments-objectはやや「魔法の」振る舞いをします。配列の要素と名前付き関数パラメーターは両方とも同じ値を参照します。
厳密モードでは、削除演算子の後に修飾されていない識別子(変数、関数、または関数パラメーター)が続くと、SyntaxErrorが発生します。通常モードでは、削除式は何も行わず、falseと評価されます。
厳密モードでは、構成不可能なプロパティを削除しようとすると、TypeErrorが発生します。 (通常モードでは、試行は単に失敗し、削除式はfalseと評価されます)。
厳密モードでは、オブジェクトリテラルに同じ名前で複数のプロパティを定義しようとすると、構文エラーと見なされます。 (通常モードではエラーはありません。)
厳密モードでは、関数宣言に同じ名前の複数のパラメーターがある場合、構文エラーと見なされます。 (通常モードではエラーはありません。)
厳密モードでは、8進リテラルは許可されません(これらは0xで始まるリテラルです。(通常モードでは、一部の実装では8進リテラルが許可されます)。
厳密モードでは、識別子evalと引数はキーワードのように扱われます。それらの値を変更したり、値を割り当てたり、catchブロックの変数、関数、関数パラメーター、または識別子の名前として使用したりすることはできません。
厳密モードでは、コールスタックを調べる可能性に対する制限が増えます。 arguments.callerとarguments.calleeは、strictモードの関数でTypeErrorを引き起こします。さらに、strictモードの関数の一部のcaller-およびargumentsプロパティは、それらを読み取ろうとするとTypeErrorを引き起こします。
|
私の2セント:
strictモードの目標の1つは、問題のデバッグを高速化できるようにすることです。それはあなたのウェブページの静かで奇妙な振る舞いを引き起こす可能性のある特定の間違ったことが起こったときに例外を投げることによって開発者を助けます。 use strictを使用すると、コードはエラーをスローし、開発者が事前に修正するのに役立ちます。
use strictを使用した後に私が学んだいくつかの重要なこと:
グローバル変数宣言の防止:
var tree1Data= {名前: 'バナナの木'、年齢:100、leafCount:100000};
関数Tree(typeOfTree){
var age;
var leafCount;
年齢= typeOfTree.age;
leafCount = typeOfTree.leafCount;
nameoftree = typeOfTree.name;
};
var tree1 = new Tree(tree1Data);
console.log(window);
ここで、このコードは、window.nameoftreeを使用してアクセスできるグローバルスコープにnameoftreeを作成します。 use strictを実装すると、コードはエラーをスローします。
Uncaught ReferenceError:nameoftreeが定義されていません
サンプル
ステートメントで排除します:
withステートメントは、uglify-jsなどのツールを使用して縮小することはできません。また、非推奨になり、将来のJavaScriptバージョンから削除されます。
サンプル
重複を防ぎます:
プロパティが重複している場合、例外がスローされます
Uncaught SyntaxError:オブジェクトリテラルのデータプロパティが重複していません
厳密モードで許可
"厳密に使用";
var tree1Data = {
名前:「バナナの木」、
年齢:100、
leafCount:100000、
名前:「バナナの木」
};
他にもいくつかありますが、それについてもっと知識を得る必要があります。
|
昨年リリースされたブラウザを使用している場合は、JavaScriptStrictモードをサポートしている可能性があります。 ECMAScript 5が現在の標準になる前の古いブラウザだけが、それをサポートしていません。
コマンドの前後の引用符は、コードが古いブラウザーでも機能することを確認します(ただし、厳密モードで構文エラーを生成すると、通常、古いブラウザーではスクリプトが検出しにくくなります)。
|
「usestrict」;を追加すると、スクリプトが実行される前に次の場合にSyntaxErrorがスローされます。
(ECMAScript 6の予測で)新しく予約されたキーワードの1つを使用して、将来のECMAScriptバージョンへの道を開きます:implements、interface、let、package、private、protected、public、static、yield。
ブロックで関数を宣言する
if(a :3:15)
<匿名>:6:5
ここで、コンパイラは参照エラーをスローします。 strictモードでは、コンパイラーは変数を宣言せずに使用することを許可しません。したがって、メモリリークを防ぐことができます。さらに、より最適化されたコードを書くことができます。
|
厳密モードでは、非厳密モードでは無視されるエラーが排除されるため、JavaScriptが「より安全」になります。
それはベストプラクティスの中で考慮されていますか?
はい、JavaScriptを使用して厳密モードを含める場合は、ベストプラクティスの一部と見なされます。これは、JSファイルに以下のコード行を追加することで実行されます。
'厳密に使用';
あなたのコードで。
ユーザーエージェントにとってそれはどういう意味ですか?
コードを厳密モードで解釈する必要があることを示すと、ブラウザなどのユーザーエージェントは、コードを文字通り記述されたものとして扱い、コードが意味をなさない場合はエラーをスローする必要があります。
例:.jsファイルに次のコードがあるとします。
シナリオ1:[厳密モードなし]
var city = "シカゴ"
console.log(city)//都市名、つまりシカゴを出力します
シナリオ2:[厳密モードなし]
city = "シカゴ"
console.log(city)//都市名、つまりシカゴを出力します
では、なぜ両方の場合に変数名が出力されるのでしょうか。
厳密モードをオンにしないと、ユーザーエージェントは、問題のあるコードを理解するために、問題のあるコードに一連の変更を加えることがよくあります。一見、これはすばらしいことのように思えるかもしれません。実際、strictモードの外で作業することで、細部を完全に特定することなく、JavaScriptコードで足を濡らすことができます。ただし、開発者として、コードにバグを残したくありません。バグが戻ってきて後で噛み付く可能性があることを知っているからです。また、良いコードを書きたいだけです。そして、それが厳密モードが役立つところです。
シナリオ3:[厳密モード]
'厳密に使用';
city = "シカゴ"
console.log(city)//参照エラー:割り当ては宣言されていない変数cityです。
追加のヒント:strictモードを使用してコードの品質を維持するために、特に複数の.jsファイルがある場合は、これを何度も書き込む必要はありません。このルールは、次のようにeslintルールでグローバルに適用できます。
ファイル名:.eslintrc.js
module.exports = {
env:{
es6:true
}、
ルール:{
厳密:['エラー'、 'グローバル']、
}、
};
さて、厳密モードでは何が防止されますか?
宣言せずに変数を使用すると、strictモードでエラーがスローされます。これは、アプリケーション全体で意図せずにグローバル変数を作成することを防ぐためです。シカゴを印刷する例は、特にこれをカバーしています。
変数、関数、または引数を削除することは、厳密モードではノーノーです。
"厳密に使用";
関数x(p1、p2){};
xを削除します。 //これによりエラーが発生します
strictモードでは、パラメーター名を複製することはできません。
"厳密に使用";
関数x(p1、p1){}; //これによりエラーが発生します
Javascript言語の予約語は、strictモードでは許可されていません。言葉は、インターフェース、let、packages、private、protected、publicを実装します。静的、および収量
より包括的なリストについては、ここでMDNドキュメントを確認してください:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
非常に活発な質問。この質問に答えるために10の評判を獲得してください。レピュテーション要件は、この質問をスパムや無回答のアクティビティから保護するのに役立ちます。
あなたが探している答えではありませんか? javascript構文jslintuse-strictのタグが付いた他の質問を参照するか、独自の質問をしてください。