⊗jsPmClCNG 265 of 505 menu

JavaScriptにおけるグローバルカウンター変数

変数 num を関数の外に出し、 グローバル変数にしてみましょう:

let num = 1; // グローバル変数 function test() { return function() { console.log(num); num++; }; }

この場合、返されるすべての関数が このグローバル変数を変更するため、 カウンターは互いに依存して動作します:

let num = 1; function test() { return function() { console.log(num); num++; }; } let func1 = test(); // 最初のカウンター func1(); // 1 を出力 func1(); // 2 を出力 let func2 = test(); // 2番目のカウンター func2(); // 3 を出力 func2(); // 4 を出力

では、なぜ前のコードは独立したカウンターを作ったのでしょうか? そのコードを再掲します:

function test() { let num = 1; return function() { console.log(num); num++; }; };

理由は、変数 num が関数 test 内の ローカル変数だからです。したがって、 test が呼び出されるたびに、 独自のローカル変数が生成されます。

そのため、返される各関数は、 それぞれの test 関数のローカル変数を参照します。 これがまさに、動作の独立性を実現する方法です。

一方、num をグローバル変数にした場合も、 クロージャにはなります。ただし、返される関数の レキシカル環境はすべて同じ変数 num を参照するため、 この変数に対する変更はすべての関数で共有されます。

コードを実行せずに、コンソールに何が出力されるか判断してください:

let counter = 0; function test() { return function() { console.log(counter); counter++; }; } let func = test; let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();

コードを実行せずに、コンソールに何が出力されるか判断してください:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test()(); let func1 = func; let func2 = func; func1(); func2(); func1(); func2();

コードを実行せずに、コンソールに何が出力されるか判断してください:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test(); let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否