序文JavaScript を学ぶとき、外部空間から内部変数にアクセスできないことは誰もが知っておく必要があります。私たちはこの基本的なルールしか知らないことが多いのですが、この基本的なルールを実装するための基本的な原則は何でしょうか。今日は、白人の視点からスコープ チェーンを理解する方法をお見せし、皆さんのお役に立てればと思います。 範囲1. スコープとは何ですか?簡単に言えば、スコープとは、名前で変数を検索するための一連のルールです。スコープは、一般的に閉じた空間として理解できます。この空間は閉じられており、外部に影響を与えません。外部空間は内部空間にアクセスできませんが、内部空間はそれをラップする外部空間にアクセスできます。 2. [[スコープ]] プロパティJavaScript では、各関数はオブジェクトです。オブジェクトの一部のプロパティにはアクセスできますが、一部のプロパティには自由にアクセスできません。[[Scopes]] プロパティはその 1 つです。このプロパティは、JavaScript エンジンによってのみ読み取ることができます。 実際、[[scope]] はスコープと呼ばれることが多く、スコープ ランタイムのコンテキスト コレクションを格納します。 ここでは、func.prototype.constructorとfuncは同じ関数を指しているので、関数funcのプロトタイプオブジェクトにアクセスして[[Scopes]]プロパティを表示します。 3. スコープチェーン[[scope]] に格納されている実行コンテキスト オブジェクトのコレクションは相互にリンクされており、このチェーン接続をスコープ チェーンと呼びます。 JavaScript はスコープ チェーンを通じて変数を検索し、スコープ チェーンの上から下に向かって検索します (オブジェクトが検索される関数のスコープ チェーンが検索されます)。 4. 変数を見つける原理の図解//次のコードを例として、スコープチェーンを通じて変数を検索する JavaScript の原理を説明します** 関数a() { 関数b() { //ここで示したbの元の値は234でしたが、コメント欄で次の数字が123と書かれていることに気づいたので、bの値を123に変更しました。 var b = 123; } var a = 123; 関数b(); } var glob = 100; 1. グローバル関数a()が定義されると、スコープチェーンは次のようになります。 関数の [[Scopes]] プロパティは、スコープ チェーン オブジェクトを指します。この時点で、スコープ チェーンには、グローバル オブジェクトを指すキーと値のペアが 1 つだけあります。グローバル オブジェクトには、グローバルにアクセスできるもの、つまり、誰でもアクセスできる最も外側のスコープが格納されます。 2. グローバル関数a()がアクティブ化されて呼び出されると、スコープチェーンは次のようになります。 このとき、スコープ チェーンが最初にアクセスできるのは、アクティベーション オブジェクト内のキーと値のペアです。キーと値のペアがない場合は、グローバル オブジェクトにアクセスします。 3. 関数bが関数a()内で定義されている場合、bのスコープチェーンは次のようになります。 b が定義されているだけで呼び出されていない場合、b のスコープ チェーンは a のスコープ チェーンと同じになります。 4. 関数a()内の関数bがアクティブ化されて呼び出されると、スコープチェーンは次のようになります。 スコープ チェーンは、最初に関数 b() のアクティベーション オブジェクトを指します。変数の検索もスコープ チェーンの順序でアクセスされ、変数が見つかると停止します。 要約する外側のスコープが内側のスコープにアクセスできない理由は、外側のスコープのスコープ チェーンに内側のスコープのアクティベーション オブジェクトがないため、内部変数にアクセスできないためです。内側のスコープが変数にアクセスする順序は、スコープ チェーンに従います。最初に内部を調べ、見つからない場合は、アプリケーション スコープ チェーンに沿って外側を調べます。外側のスコープはグローバル スコープです。 JavaScript スコープ チェーンの基本原理に関するこの記事はこれで終わりです。JavaScript スコープ チェーンに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker イメージのデフォルトの保存場所を変更する方法 (ソリューション)
目次背景成し遂げるvue-cli2.0での設定方法の補足要約する背景プロジェクトにはローカル構成ファ...
以下に、トレーニング機関からのヒントと私自身の要約をいくつか示します。以下のインデックスの内容を説明...
1. SHOW PROCESSLISTコマンドSHOW PROCESSLIST は実行中のスレッド ...
問題を見つける最近、プログラムのストレージを Mongodb に移行したところ、Guid 型が書き込...
今日、vue3+viteプロジェクトの実践で、svgを使用する場合、以前の記述方法が使用できないこと...
1. MySQL 独自のストレステストツール - Mysqlslap mysqlslap は、mys...
目次1. ユーザーが作成したスクリプト2. 単語当てゲーム3. ネットワークカードのトラフィック監視...
1. 問題の出現フラット リストを作成しました。リストの一部には、マウスをホバーすると表示されるポッ...
目次1. 従来のコレクションに対するフィルター、マップ、および削減処理方法2. 再帰処理3. for...
目次序文: 1. ユーザー権利の概要2. 実際の権限管理序文:データベースのユーザー権限管理について...
シェルを起動する頻度は非常に低いですが。 。 。しかし、書くたびに、多くの jar ファイル パスを...
以前、https://www.jb51.net/article/205922.htm で、Docke...
W3Cschoolではこのように説明しています<meta> 要素は、検索エンジン向けの説...
この記事では、参考までに、カルーセル効果の具体的なコードをJavaScript+CSSを使用して実装...
マイクロサービスのイメージは、保存用に Docker リポジトリにアップロードされます。一般的に使用...