ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 変数のスコープとメモリの問題 (2)_html/css_WEB-ITnose

JavaScript 変数のスコープとメモリの問題 (2)_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:47:151086ブラウズ

実行環境は、js において特に重要な概念であり、変数や関数が他のデータにアクセスし、独自の動作を定義できることを意味します。各実行環境には、対応する変数オブジェクトがあります。実行環境で定義されたすべての変数と関数は、この変数に格納されます。この変数は、バックグラウンドで確認できます。
グローバル変数の実行環境は、Web ブラウザでは最も周辺的な実行環境です。グローバル実行環境はウィンドウ オブジェクトであるため、すべての関数とグローバル変数はウィンドウ オブジェクトの属性として使用できます。他の実行環境では、関数と変数の実行後にメモリが破壊され、変数と関数も破壊され、ページまたはブラウザを閉じるときにグローバル変数も破壊されます。
「環境内でコードが実行されると、変数オブジェクトのスコープ チェーンが作成されます。スコープ チェーンの目的は、実行環境がアクセスできるすべての変数と関数に確実にアクセスできるようにすることです。チェーンは常に、現在実行されているコードが配置されている環境の変数オブジェクトです。環境が関数の場合、そのアクティベーション オブジェクトは最初に 1 つの変数、つまり引数オブジェクトとして使用されます。 (このオブジェクトはグローバル環境には存在しません)。スコープ チェーン内の次の変数オブジェクトは、それを含む (外部) 環境から取得され、次の変数オブジェクトはその次の変数オブジェクトから取得されます。グローバル実行環境の は、常にスコープ チェーンの最後のオブジェクトです。「
特に重要な情報を多く取得できます。スコープ チェーンの役割は、実行環境内のすべての変数と関数に確実に秩序正しくアクセスできるようにすることです。」この順序は、スコープ チェーンのフロントエンドが引数オブジェクトであり、最後のエンドがグローバル実行環境のウィンドウ オブジェクトであるという事実に反映されています。次の例を見てください:

var color = "blue";function changeColor(){   var anotherColor = "red";   function swapColors(){       var tempColor = anotherColor;       anotherColor = color;       color = tempColor;       // 这里可以访问color、anotherColor和tempColor   }   // 这里可以访问color和anotherColor,但不能访问tempColor   swapColors();}// 这里只能访问colorchangeColor();




2. スコープ チェーンを拡張する
一部のステートメントでは、実行中にスコープ スタックのフロント エンドに変数オブジェクトを追加し、ステートメントの実行後に変数オブジェクトをクリアできます。したがって、スコープは次の 2 つのステートメントによって拡張されます:
1. try-catch ステートメントの catch ステートメント
2. with ステートメント
例:

function buildUrl() {   var qs = "?debug=true";   with(location){       var url = href + qs;   }   return url;}


ここで、with はステートメントは location オブジェクトを受け取るため、その変数オブジェクトには location オブジェクトのすべてのプロパティとメソッドが含まれ、この変数オブジェクトはスコープ チェーンのフロントエンドに追加されます。変数 qs は buildUrl() 関数で定義されます。変数 href が wi​​th ステートメントで参照される場合 (実際の参照は location.href です)、現在の実行環境の変数オブジェクト内で見つけることができます。変数 qs を参照する場合、関数環境の変数オブジェクトにある buildUrl() で定義された変数を参照します。 with文の中ではurlという変数が定義されているので、urlが関数の実行環境の一部となり、関数の値として返すことができます。
3. ブロックレベルのスコープはありません
1. 他の言語ではループ文などの変数のスコープを中括弧で囲みますが、js にはブロックレベルのスコープがありません。
2. jsで変数を宣言する場合、varを付けないとデフォルトはグローバル変数になります。
3.js は、最初にローカル スコープでクエリを実行し、次にグローバル スコープでクエリを実行する順序で識別子をクエリします。
など:

var color = "blue";function getColor(){   var color = "red";    return color;}//"red"alert(getColor());

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