1. ホーム
  2. javascript

[解決済み] JavaScriptの「実行コンテキスト」とは何ですか?

2023-05-22 14:35:15

質問

私のタイトルがすべてを表していますね。

どなたか教えてください...

"JavaScriptにおける「実行コンテキスト」とは何でしょうか。

そして、それがどのように 'this', hoisting, prototype chaining, scope, garbage collection に関連するのかについて教えてください。

どのように解決するのですか?

あまり密接に関連しないいくつかの異なる概念について質問されています。 それぞれについて簡単に説明します。


実行コンテキスト は言語仕様における概念で、平たく言えば、関数が実行される「環境」とほぼ同じです。 スコープ チェーン で、外部スコープからクロージャ内の変数)、関数の引数、そして this オブジェクトの値です。

コールスタック は実行コンテキストの集合体です。

参照 この回答 この記事 .


範囲 は文字通り、変数にアクセスできるスコープを表します。 単純化すると

var x;

function a() {
    var y;
}

x はどこからでもアクセスできます。 いつ a が呼び出されると x は外部スコープになります。 (に格納される)。 スコープチェーン .)

これに対して y の中のコードからのみアクセス可能です。 a() に限定されるため a のスコープに限定されるからです。 これが var キーワードは、変数をローカルスコープに制限するものです。 もし var , y で終わってしまうので グローバルスコープ になってしまうので、一般に悪いことだと考えられています。


考える 吊り上げる はどちらかというとコンパイル時のものだと考えてください。 JavaScript では、関数 宣言 はスコープの一番上に表示されます。 言い換えれば、それらは解析され評価されます。 の前に の前に解析され評価されます。 (これは関数 とは対照的です)。 以下を考えてみましょう。

a();
b();

function a() { }
var b = function() { }

の呼び出しは a() の呼び出しは、その宣言がトップに持ち上げられたので成功します。 a はプログラムの実行が始まる前に自動的に割り当てられたからである。 の呼び出しは b() を呼び出すと失敗します。 TypeError なぜなら b は4行目まで定義されないからです。