「厳密モード」は ECMA-262 Edition 5 で定義された新しい構文であり、これまで一般的に使用されていた一部の書き込みメソッドでは、次のような SyntaxError 例外がスローされることを意味します。 1. 変数
の前に var 宣言がありません。 2. 8 進数の構文を使用します: var n = 023 および var s = "
1. 「strict モード」を使用する理由
「strict モード」を確立する主な目的は次のとおりです。
1. Javascript 構文の不合理で不正確な部分を削除し、いくつかの奇妙な動作を削減します。
2. コード実行の安全性を確保し、コンパイラーの効率を向上させます。実行速度;
4. 将来の Javascript の新しいバージョンへの道を切り開く。
「厳密モード」は、JavaScript のより合理的で安全かつ厳密な開発方向を反映しており、IE 10 を含む主流ブラウザはすでにそれをサポートしており、多くの大規模プロジェクトがそれを全面的に採用し始めています。
この記事では「ストリクトモード」について詳しく紹介します。
2. 「厳密モード」を宣言します
「厳密モード」の宣言は、1 つのステートメントだけで非常に簡単です:
コードは次のとおりです:
"use strict";注: 古いバージョンのブラウザでは、これを通常の文字列の行として扱い、無視します。
3. 「厳密モード」を宣言する位置と文脈
コードをコピー
コードは次のとおりです:
<script><P>"use strict"; <BR>console.log("これは strict モードです。");</script>
2. 単一関数の場合
関数本体の最初の行に「use strict」と入力すると、関数全体が「strict モード」で実行されます。
コードをコピー
コードは次のとおりです:
function strict(){" use strict" ;
return "これは strict モードです。";}
function notStrict() {
3. スクリプト ファイルを記述する別の方法
最初の呼び出しメソッドはファイルのマージに適していないため、より良いアプローチは 2 番目のメソッドと全体を借用することです。スクリプト ファイルは、すぐに実行される匿名関数に配置されます。
(function (){
"use strict";
// ここにコードをいくつか示します
})();
4. 「厳密モード」での構文と動作の変更
「厳密モード」では、JavaScript の構文と動作にいくつかの変更が加えられています。
1. グローバル変数の明示的な宣言
通常モードでは、変数を使用するときに、最初に var で変数を宣言する必要はありません (明示的宣言)。しかし、Strict モードでは、変数は使用する前に var で宣言する必要があります。そうしないと、エラーが発生します。 。
"use strict";
v = 1; // エラーが報告されました、v は宣言されていません
for(i = 0; i }
したがって、 strict モードでは、変数は最初に var コマンドで宣言してから使用する必要があります。
2. 静的バインディング
JavaScript 言語の特徴は、「動的バインディング」が可能であることです。つまり、特定のプロパティやメソッドがどのオブジェクトに属するかは、コンパイル時ではなく実行時に決定されます。
厳密モードでは、動的バインディングにいくつかの制限が課されます。場合によっては、静的バインディングのみが許可されます。つまり、プロパティとメソッドがどのオブジェクトに属するかは、コンパイル段階で決定されます。これにより、コンパイル効率が向上し、コードが読みやすくなり、予期せぬ事態が少なくなります。
具体的には、次のような側面が含まれます。
(1) with ステートメント
with ステートメントでは、コンパイル時に属性がどのオブジェクトに属しているかを判断できないためです。
"use strict";
var v = 1 ;
with (o){ // 構文エラー
v = 2;
}
(2) eval スコープの作成
通常モードでは、JavaScript 言語にはグローバル スコープと関数スコープという 2 つの変数スコープがあります。厳密モードでは、3 番目のスコープである eval スコープが作成されます。
通常モードでは、eval ステートメントのスコープは、グローバル スコープにあるか関数スコープにあるかによって異なります。 strict モードでは、eval ステートメント自体がスコープとなり、グローバル変数を生成できなくなります。生成された変数は eval 内でのみ使用できます。
"use strict";
var x = 2 ;
console.info(eval("var x = 5; x")); // 5
console.info(x); // 2
3. セキュリティ対策の強化
(1) このキーワードがグローバル オブジェクトを指すことを禁止します
function f(){
return !this;
}
// "this" がグローバル オブジェクト "!this" を指しているため、false を返します。 is false
function f (){
"use strict";
return !this;
}
// strict モードでは this の値は true を返します。未定義なので、「!this」は true です。
したがって、コンストラクターを使用するときに new を追加するのを忘れると、これはグローバル オブジェクトを指さなくなり、エラーが報告されます。
function f(){
"use strict";
this.a = 1;
};
f();// エラー、これは未定義です
通常の関数呼び出し f() では、this の値はグローバル オブジェクトを指します。厳密モードでは、この関数が call および apply によって呼び出された場合、thisvalue パラメーターが指定されている場合、this の値は未定義を指します。 null と未定義を除くプリミティブ値 (文字列、数値、ブール値) の場合、thisvalue パラメータの値が未定義または null の場合、this の値はそのプリミティブ値に対応するパッケージング オブジェクトになります。 this の値はグローバル オブジェクトを指します。厳密モードでは、this の値は型変換なしの thisvalue パラメーターの値になります。
(2) 関数内の呼び出しスタックを走査することは禁止されています
function f1(){
"use strict";
f1.caller; // エラー報告
f1.arguments; // エラー報告
}
f1();
4. 変数の削除は禁止されています
厳密モードでは変数を削除できません。構成可能が true に設定されているオブジェクト属性のみを削除できます。
"use strict";
var x;
delete x; // 構文エラー
var o = Object.create(null, 'x', {
value: 1,
configurable: true
});
delete o.x ; // 削除成功
5. 明示的なエラー報告
通常モードでは、オブジェクトの読み取り専用プロパティに値を代入してもエラーは報告されませんが、警告なしに失敗します。厳密モードでは、エラーが報告されます。
"use strict";
var o = { };
Object.defineProperty(o, "v", { value: 1, writable: false });
o.v = 2; // エラー報告
厳密モードでは、メソッドによって読み取られた属性に値が割り当てられている場合、エラーが報告されます。
"use strict";
var o = {
get v() { return 1; }
};
o.v = 2; // エラーレポート
が禁止されているオブジェクトに新しい属性を追加します展開するとエラーが報告されます。
"use strict";
var o = { };
Object.preventExtensions(o);
o.v = 1; // エラー報告
厳密モードでは、削除できない属性を削除するとエラーが報告されます。
"use strict";
delete Object.prototype ; // エラーを報告します
6. 名前の重複エラー
厳密モードでは、いくつかの新しい構文エラーが追加されました。
(1) オブジェクトは重複する名前の属性を持つことはできません
通常モードでは、オブジェクトに同じ名前の複数の属性がある場合、最後に割り当てられた属性が以前の値を上書きします。厳密モードでは、これは構文エラーです。
"use strict";
var o = {
p: 1,
p: 2
} // 構文エラー
(2) 関数には重複した名前のパラメータを含めることはできません
通常モードでは、関数に同じ名前の複数のパラメーターがある場合、arguments[i] を使用してそれらを読み取ることができます。厳密モードでは、これは構文エラーです。
"use strict";
関数f(a , a, b) { // 構文エラー
return ;
}
7. 8 進表記は禁止されています
通常モードでは、整数の最初の桁が 0 の場合、それは 8 進数であることを意味します。たとえば、0100 は 10 進数の 64 に相当します。厳密モードではこの表現は禁止されており、整数の最初のビットは 0 であり、エラーが報告されます。
"use strict";
var n = 0100 ; // 構文エラー
8. 引数オブジェクト
arguments は関数のパラメータ オブジェクトであり、strict モードではその使用が制限されます。
(1) 引数への代入は許可されていません
"use strict";
arguments ; // 構文エラー
var obj = { set p(arguments) { } } // 構文エラー
try { } catch ( argument) { } // 構文エラー
function argument() { } // 構文エラー
var f = new Function("arguments", "'use strict'; return 17;"); // 構文エラー
(2) 引数はパラメーターの変更を追跡しなくなりました
function f(a) {
a = 2;
return [a, argument[0]];
}
f(1); // 通常モードは [2,2]
function f(a) {
"厳密な使用";
a = 2;
return [a, argument[0]];
}
f (1); // 厳密モードは [2,1]
(3) argument.callee の使用は禁止されています
これは、匿名関数内で自分自身を呼び出すことができないことを意味します。
"use strict";
var f = function () { return argument.callee };
f(); // エラーを報告します
9. 関数は最上位レベルで宣言する必要があります
JavaScript の新しいバージョンでは、将来「ブロックレベルのスコープ」が導入される予定です。新しいバージョンに準拠するために、厳密モードでは、グローバル スコープまたは関数スコープの最上位レベルで関数を宣言することのみが許可されます。つまり、関数以外のコード ブロック内で関数を宣言することはできません。
"use strict";
if (true) {
function f() { } // 構文エラー
}
for (var i = 0; i function f2() { } //構文エラー
}
10. 予約語
将来 JavaScript の新しいバージョンに移行するために、strict モードには新しい予約語がいくつか追加されます:implements、interface、let、package、private、protected、public、static、yield。
これらの単語を変数名として使用すると、エラーが発生します。
function package(protected) { // 構文error
"use strict";
varimplements; // 構文エラー
}
さらに、ECMAscript の 5 番目のバージョン自体も他の予約語 (class、enum、export、 extends、import、super)、および主要なブラウザで追加された const 予約語は変数名として使用できません。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
