ホームページ > ウェブフロントエンド > jsチュートリアル > スコープ チェーンとは何ですか?またその仕組みは何ですか?

スコープ チェーンとは何ですか?またその仕組みは何ですか?

Susan Sarandon
リリース: 2024-12-05 00:57:11
オリジナル
432 人が閲覧しました

はじめに

JavaScript で変数にアクセスする方法を理解することは、クリーンで効率的でバグのないコードを作成するための基礎です。スコープ チェーンは、変数アクセスとコードの実行コンテキストを管理する重要な概念です。

この記事では、スコープ チェーンとは何か、それが JavaScript でどのように機能するのかを説明し、その動作を示す実践的な例を示します。

スコープ チェーンとは何ですか?

スコープ チェーンは、実行中に変数と関数が検索される順序を決定する JavaScript のメカニズムです。

コード内で変数が参照されると、JavaScript は次の順序で変数を検索します。

? ローカルスコープ: 変数が直接宣言される関数またはブロック。

??‍? アウタースコープ: 関数またはブロックを囲み、レイヤーごとに外側に移動します。

? グローバル スコープ: プログラムの最も外側のスコープ。

これらのスコープのいずれにも変数が見つからない場合、JavaScript は ReferenceError をスローします。

スコープ チェーンはどのように機能しますか?

1.ローカルスコープ
関数内で宣言された変数はその関数のスコープに属し、その関数の外部からアクセスすることはできません。

function localExample() {
  let message = "Hello, Local Scope!";
  console.log(message); // Works
}
console.log(message); // ReferenceError: message is not defined
ログイン後にコピー

2.入れ子関数と外部スコープ

ネストされた関数は、スコープ チェーンにより親関数から変数にアクセスできます。

function outer() {
  let outerVariable = "I'm in the outer function!";

  function inner() {
    console.log(outerVariable); // Accessible due to the scope chain
  }

  inner();
}
outer();
ログイン後にコピー

3.グローバル スコープ

関数の外で宣言された変数はグローバル スコープの一部であり、どこからでもアクセスできます (モジュール内を除く)。

let globalVariable = "I'm in the global scope!";
function showGlobal() {
  console.log(globalVariable); // Accessible
}
showGlobal();
ログイン後にコピー

4.シャドーイング

ローカル スコープ内の変数が外側のスコープ内の変数と同じ名前を持つ場合、ローカル変数は外側の変数を「シャドウ」します。

let name = "Global Name";

function greet() {
  let name = "Local Name";
  console.log(name); // Outputs: "Local Name"
}

greet();
console.log(name); // Outputs: "Global Name"
ログイン後にコピー

スコープチェーンの実践例

スコープ チェーンが変数アクセスをどのように解決するかを示してみましょう:

let globalVar = "Global";

function outerFunction() {
  let outerVar = "Outer";

  function innerFunction() {
    let innerVar = "Inner";

    console.log(innerVar);   // Found in local scope
    console.log(outerVar);   // Found in outer scope
    console.log(globalVar);  // Found in global scope
  }

  innerFunction();
}
outerFunction();
ログイン後にコピー

出力:

Inner
Outer
Global
ログイン後にコピー

以下のことが起こります:

1️⃣ innerVar は innerFunction のローカル スコープで見つかりました。
2️⃣ externalVar は、outerFunction.
の親 (外側) スコープで見つかります。 3️⃣ globalVar は、内部スコープまたは外部スコープで定義されていないため、グローバル スコープで見つかります。

スコープチェーンとクロージャー

JavaScript のクロージャはスコープ チェーンを利用して、外部関数が実行された後でも外部関数変数へのアクセスを保持します。

function makeCounter() {
  let count = 0;

  return function () {
    count++;
    return count;
  };
}

const counter = makeCounter();
console.log(counter()); // Outputs: 1
console.log(counter()); // Outputs: 2
ログイン後にコピー

ここで、内部関数はオーバーカウントのクロージャーを形成し、makeCounter の実行が終了した後でもそれをスコープチェーンに保持します。

結論

スコープ チェーンは JavaScript の実行コンテキストの重要な部分です。スコープ チェーンが変数アクセスをどのように解決するかを理解することで、より明確で予測可能なコードを作成できます。ネストされた関数からクロージャまで、この概念をマスターすると、JavaScript のスキルが向上し、デバッグ プロセスが向上します。

What is the Scope Chain and How Does It Work?

以上がスコープ チェーンとは何ですか?またその仕組みは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート