この記事では主にjsにおけるクロージャの学習体験とコード記述の重要なポイントを紹介しますので、興味のある方は一緒に学んでみてください。
クロージャー
中国語の意味は、荷物を閉じることです。機能の範囲をパッケージとして考えると、この言葉はその役割を如実に反映します。関数の通常の実行フローでは、関数内のステートメントが実行された後、プログラムは関数のスコープを自動的に破棄します。ただし、関数内で別の関数が宣言されており、親関数を参照する変数が存在する場合は、その関数のスコープが自動的に破棄されます。サブ関数が実行されると、クロージャが形成されます。これは、親関数のスコープを閉じて、プログラムが親関数を破棄するのを防ぐのと同じです。
例:
function a() { var name = "xuxu"; function b() { console.log(name); } // 此处产生闭包 b(); } a();
クロージャは、関数がそのスコープチェーンを記憶してアクセスできるときに生成されます。 もちろん、ほとんどのクロージャはそれほど直感的ではありません。子関数の呼び出しは親関数内で行うことができるためです。その他、例:
function a() { var name = "xuxu"; function b() { console.log(name); } return b; } var c=a(); // 此处产生闭包 此处的c函数其实就是a函数 c();
上記のコードを通じて、クロージャの利点もわかります。つまり、グローバル スコープ (ここでは幅) の値でローカル スコープ (関数) のスコープにアクセスします。これは通常の語彙スコープに従って行うことはできませんが、クロージャを使用すると可能になります。それでは、私たちが普段書いていることをさらに見てみましょう:
function foo() { var a = 2; function baz() { // 2 console.log( a ); } bar( baz ); } function bar(fn) { // 大家快看呀,这就是闭包! fn(); }
または
var fn; function foo() { var a = 2; function baz() { console.log( a ); } // 将baz分配给全局变量 fn = baz; } function bar() { // 大家快看呀,这就是闭包! fn(); } foo(); // 2 bar();
上記は、私が皆さんのためにまとめたものです。将来、皆さんのお役に立てれば幸いです。
関連記事:
Puppeteer画像認識技術を使用したBaiduインデックスクローラーの実装方法
webpack-dev-serverでの自動ページ更新の実装
以上がjs でのクロージャ (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。