グローバルスコープと、さらにネスト可能な機能スコープがあることを理解しています。しかし、Javascript には他のタイプのスコープやクロージャがありますか?
このトピックに取り組んでいますが、スコープとクロージャーの違いは何ですか?
グローバルスコープと、さらにネスト可能な機能スコープがあることを理解しています。しかし、Javascript には他のタイプのスコープやクロージャがありますか?
このトピックに取り組んでいますが、スコープとクロージャーの違いは何ですか?
クロージャは、可視スコープのスタックです。次のコードがあるとします。
var v1;
function a() {
var v2;
function b() {
var v3;
function c() {
var v4;
}
return c;
}
return b();
}
var f = a();
cは、4 つの可視スコープを持つ関数です: 独自のスコープ (v4が定義されている場所)、b関数のスコープ (v3が定義されている場所)、a関数のスコープ (v2が定義されている場所)、およびグローバル スコープ (v1が定義されている場所)。可視スコープのスタックがクロージャーであり、関数はそのクロージャーにバインドされています。関数への参照が からに呼び出され、最後に に割り当てられcたコール チェーンで返されると、このクロージャー バインディングが一緒に運ばれるため、baff()、グローバルスコープで関数を呼び出しているように見えても、これらすべてのスコープにアクセスできます。ご覧のとおり、関連するスコープはグローバル スコープと関数スコープの 2 種類だけです。主な違いは、グローバル スコープの変数はグローバル オブジェクトのプロパティとして定義されるのに対し、関数スコープの変数はオブジェクトのプロパティではなく、名前以外の方法で参照できないことです。クロージャはそれ自体がスコープではなく、スコープのコレクションです。