ホームページ ウェブフロントエンド jsチュートリアル JavaScript 厳密モードで With ステートメントが無効になる理由

JavaScript 厳密モードで With ステートメントが無効になる理由

Sep 19, 2017 am 11:32 AM
javascript js なぜ

私は JavaScript Strict Mode を何度も読みましたが、その中の 1 つが「With ステートメントを無効にする」と書いてあり、なぜ「Strict Mode」が with ステートメントを許容できないのか疑問に思いました。もしあなたが混乱しているなら、次のように考えてください。

私は JavaScript Strict モードを何度も読みましたが、その 1 つには「With ステートメントを無効にする」という記述がありました。このステートメントは日常生活ではめったに使用されないため、私はこれをただ単に観察しているだけだと思っていました。無効にできなくても問題ありません。今日、なぜ「厳密モード」が with ステートメントに対応できないのか疑問に思わずにはいられません。

EcmaScript 仕様には、「with ステートメントは、特定のオブジェクト内のコードのスコープを設定するために使用される」と記載されており、With ステートメントがスコープ チェーンを変更することがわかります。


function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
(function(){
var title = '申请人:';
var zhangsan = new Person('张三',20,'男');
var str = '';
with(zhangsan){
str = title+name+',年龄'+age+'岁,'+sex+'性'+',职位'+job;
}
console.log(str);
})();
ログイン後にコピー

上記のコードは、Uncaught ReferenceError: job is not generated を報告します。

上記の with ステートメント ブロックを

str = title+zhangsan.name+', age'+zhangsan.age+'years old,'+zhangsan.sex+'sex'+',position'+zhangsan.job; に変更すると、

エラーは報告されず、出力文字列は次のとおりです: 応募者: Zhang San、20 歳、男性、ポジション未定義

with ステートメント ブロック内の変数については、実行時にその属性が zhangsan にあるかどうかを確認します。

スクリプトを実行する場合、最初にコンパイルし、次に実行という 2 つのプロセスが必要であることがわかっています。
明らかに、コンパイル時には、変数 zhangsan によって表されるオブジェクトがどのような属性を持っているかを判断することはできません。 zhangsan が person のインスタンスであるかどうかは、実行時にのみ判断できます。したがって、with ステートメント ブロック内の変数が zhangsan の属性であるか、上位レベルの変数スコープ チェーン内の変数であるかをコンパイル時に確認することはできません。

これは、コンパイル時に変数が定義されているかどうかをチェックする厳密モードと競合するため、厳密モードでは差異が存在することが許可されないため、厳密モードが With ステートメントを無効にすることを理解するのは難しくありません。

以上がJavaScript 厳密モードで With ステートメントが無効になる理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

rootとしてmysqlにログインできません rootとしてmysqlにログインできません Apr 08, 2025 pm 04:54 PM

ルートとしてMySQLにログインできない主な理由は、許可の問題、構成ファイルエラー、一貫性のないパスワード、ソケットファイルの問題、またはファイアウォール傍受です。解決策には、構成ファイルのBind-Addressパラメーターが正しく構成されているかどうかを確認します。ルートユーザー許可が変更されているか削除されてリセットされているかを確認します。ケースや特殊文字を含むパスワードが正確であることを確認します。ソケットファイルの許可設定とパスを確認します。ファイアウォールがMySQLサーバーへの接続をブロックすることを確認します。

MongoDBデータベースパスワードを表示するNAVICATの方法 MongoDBデータベースパスワードを表示するNAVICATの方法 Apr 08, 2025 pm 09:39 PM

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

SQLが行を削除した後にデータを回復する方法 SQLが行を削除した後にデータを回復する方法 Apr 09, 2025 pm 12:21 PM

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

Centosはメンテナンスを停止します2024 Centosはメンテナンスを停止します2024 Apr 14, 2025 pm 08:39 PM

Centosは、上流の分布であるRhel 8が閉鎖されたため、2024年に閉鎖されます。このシャットダウンはCentos 8システムに影響を与え、更新を継続し続けることができません。ユーザーは移行を計画する必要があり、提案されたオプションには、Centos Stream、Almalinux、およびRocky Linuxが含まれ、システムを安全で安定させます。

MySQLはプロセスを終了できません MySQLはプロセスを終了できません Apr 08, 2025 pm 02:48 PM

MySQLのキルコマンドは、プロセスの特別なステータスと不適切な信号レベルのために失敗することがあります。 MySQLプロセスを効果的に終了する方法には、次のものが含まれます。プロセスステータスの確認、MySQladminコマンド(推奨)、慎重にキル-9を使用し、システムリソースのチェック、エラーログの詳細なトラブルシューティング。

MariadBのNAVICATでデータベースパスワードを表示する方法は? MariadBのNAVICATでデータベースパスワードを表示する方法は? Apr 08, 2025 pm 09:18 PM

Passwordが暗号化された形式で保存されているため、MariadbのNavicatはデータベースパスワードを直接表示できません。データベースのセキュリティを確保するには、パスワードをリセットするには3つの方法があります。NAVICATを介してパスワードをリセットし、複雑なパスワードを設定します。構成ファイルを表示します(推奨されていない、高リスク)。システムコマンドラインツールを使用します(推奨されません。コマンドラインツールに習熟する必要があります)。

PostgreSQLデータベースパスワードを表示するNAVICATの方法 PostgreSQLデータベースパスワードを表示するNAVICATの方法 Apr 08, 2025 pm 09:57 PM

NAVICATはセキュリティ上の理由で暗号化されたパスワードを保存するため、NAVICATからPostgreSQLパスワードを直接表示することは不可能です。パスワードを確認するには、データベースに接続してみてください。パスワードを変更するには、PSQLまたはNAVICATのグラフィカルインターフェイスを使用してください。他の目的のために、ハードコーディングされたパスワードを避けるために、コード内の接続パラメーターを構成する必要があります。セキュリティを強化するには、強力なパスワード、定期的な変更を使用し、多要素認証を有効にすることをお勧めします。

NAVICAT接続タイムアウト:解決方法 NAVICAT接続タイムアウト:解決方法 Apr 08, 2025 pm 11:03 PM

NAVICAT接続タイムアウトの理由:ネット​​ワークの不安定性、ビジーデータベース、ファイアウォールブロッキング、サーバー構成の問題、不適切なNAVICAT設定。解決策:ネットワーク接続、データベースのステータス、ファイアウォール設定、サーバー構成の調整、NAVICAT設定の確認、ソフトウェアとサーバーの再起動、管理者にお問い合わせください。

See all articles