TECH I.S.

JavaScript クロージャ


JavaScript 変数は、ローカルスコープまたは グローバルスコープに属することができます。

グローバル変数は、クロージャを使用してローカル (プライベート) にすることができます。



グローバル変数

次のように関数内でfunction定義されたすべての変数にアクセスできます。

function myFunction() {   let a = 4;   return a * a; }

自分で試してみる»

ただし、次のように、関数の外部でfunction定義された変数にアクセスすることもできます。

let a = 4; function myFunction() {   return a * a; }

自分で試してみる»

最後の例では、aですグローバル変数。

Web ページでは、グローバル変数はページに属します。

グローバル変数は、ページ内の他のすべてのスクリプトで使用 (および変更) できます。

最初の例では、aです地元変数。

ローカル変数は、それが定義されている関数内でのみ使用できます。他の関数や他のスクリプト コードから隠されています。

同じ名前のグローバル変数とローカル変数は別の変数です。一方を変更しても、他方は変更されません。


作成された変数それなし宣言キーワード (varlet、 またconst) は、関数内で作成された場合でも、常にグローバルです。


function myFunction() {   a = 4; }

自分で試してみる»



可変寿命

グローバル変数は、別のページに移動するか、ウィンドウを閉じるときなど、ページが破棄されるまで有効です。

ローカル変数の寿命は短いです。関数が呼び出されると作成され、関数が終了すると削除されます。


カウンタージレンマ

何かをカウントするために変数を使用し、このカウンターをすべての関数で使用できるようにしたいとします。

グローバル変数とfunctionカウンターを増やすには

// カウンターを開始する let counter = 0; // カウンタをインクリメントする機能 function add() {   counter += 1; } //add()を3回呼び出す add(); add(); add(); // カウンターは3になっているはずです

自分で試してみる»

上記のソリューションには問題があります。ページ上のコードは、add() を呼び出さずにカウンターを変更できます。

カウンターは、add()関数、他のコードがそれを変更するのを防ぐために

// カウンターを開始する let counter = 0; // カウンタをインクリメントする機能 function add() {   let counter = 0;   counter += 1; } // add()を3回呼び出す add(); add(); add(); //カウンターは3になっているはずだ。しかし0だ。

自分で試してみる»

ローカルカウンターではなくグローバルカウンターを表示しているため、機能しませんでした。

グローバル カウンターを削除し、関数にローカル カウンターを返させることでローカル カウンターにアクセスできます。

// カウンタをインクリメントする機能 function add() {   let counter = 0;   counter += 1;   return counter; } // add()を3回呼び出す add(); add(); add(); //カウンターは3になっているはずだ。しかし1になっている。

自分で試してみる»

関数を呼び出すたびにローカルカウンターをリセットしたため、機能しませんでした。

JavaScript 内部関数はこれを解決できます。


JavaScript ネスト関数

すべての関数は、グローバル スコープにアクセスできます。

実際、JavaScript では、すべての関数が「上の」スコープにアクセスできます。

JavaScript はネストされた関数をサポートしています。ネストされた関数は、それらの「上の」スコープにアクセスできます。

この例では、内部関数plus()にアクセスできますcounter親関数の変数:

function add() {   let counter = 0;   function plus() {counter += 1;}   plus();      return counter; }

自分で試してみる»

plus()この機能に外部からアクセスできれば、カウンターのジレンマは解決できたかもしれません。

また、一度だけ実行する方法を見つける必要もありますcounter = 0

閉鎖が必要です。


JavaScript クロージャ

自己呼び出し関数を覚えていますか?この関数は何をしますか?

const add = (function () {   let counter = 0;   return function () {counter += 1; return counter} })(); add(); add(); add(); // カウンターは現在3

自分で試してみる»

例の説明

変数add自己呼び出し関数の戻り値に割り当てられます。

自己呼び出し関数は 1 回だけ実行されます。カウンターをゼロ (0) に設定し、関数式を返します。

このように add は関数になります。 「素晴らしい」部分は、親スコープのカウンターにアクセスできることです。

これを JavaScript と呼びます閉鎖。関数が「プライベート"変数。

カウンターは無名関数のスコープによって保護されており、add 関数を使用してのみ変更できます。


クロージャーは、親関数が閉じた後でも、親スコープにアクセスできる関数です。



プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細