ホームページ  >  記事  >  ウェブフロントエンド  >  js でのクロージャ (詳細なチュートリアル)

js でのクロージャ (詳細なチュートリアル)

亚连
亚连オリジナル
2018-06-07 15:28:442276ブラウズ

この記事では主に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インデックスクローラーの実装方法

jquery技術による虫眼鏡の実装

webpack-dev-serverでの自動ページ更新の実装

以上がjs でのクロージャ (詳細なチュートリアル)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。