ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript クロージャとアプリケーションの詳細な説明

JavaScript クロージャとアプリケーションの詳細な説明

高洛峰
高洛峰オリジナル
2017-01-20 11:16:361134ブラウズ

クロージャは本当に何度も学びましたし、JSは奥が深くて、学ぶたびに新しいことを得た気がします。誰もがフロントエンド プラグインをカプセル化する場合、クロージャは不可欠であると私は信じています。私は個人的に、クロージャの本当の利点は、カプセル化だけではなく、独自のプライベート メソッドを導入できること、そして、コードの外部オブジェクトをきれいに保つことにもあると考えています。

本題へ

Wikipedia では JS クロージャを次のように定義しています: コンピュータサイエンスでは、字句クロージャ (Lexical Closure) または関数クロージャ (関数クロージャ) とも呼ばれるクロージャ (英語: Closure) は、自由関数への参照です。変数。参照された自由変数は、関数が作成された環境を離れた後も関数とともに残ります。したがって、クロージャは関数とそれに関連する参照環境で構成されるエンティティである、という別の言い方もできます。クロージャは実行時に複数のインスタンスを持つことができ、異なる参照環境と同じ関数の組み合わせによって異なるインスタンスが生成されることがあります。

平たく言えば、クロージャは通常の関数とは異なります。クロージャを使用すると、関数は即時呼び出しの範囲外の非ローカル変数にアクセスできます。また、クロージャの構文によってコードがより動的になることも言いたいのですが、次のコード部分を見て何かを感じられるかもしれません。

<script>
 (function () {
  var userToken = "this is my token";
  var someConfig = "opening some function";
  var privateValue = "private";
  var publicValue = "public";
  var appObj = {};
  function myPrivateFunc() {
  alert(privateValue)
  }
  appObj.getUserToken = function () {
  //some logic
  userToken += " after some inner logic";
  return userToken;
  }
  appObj.publicVal = publicValue;
  window.application = appObj;
 }());//立即执行
 console.log(application.getUserToken());//this is my token after some inner logic
 console.log(application.publicVal);//public
 console.log(application.privateValue); //undefined
 application.myPrivateFunc(); //error
 </script>


私は通常、アプリケーション全体に共通のトップレベルのオブジェクトを表す application という名前のグローバル オブジェクトを定義することを好みます。ここで、多くのパブリック操作メソッドを公開できます。また、外部呼び出しによる問題の発生を防ぐために、内部でプライベート処理を実行することもできます。定義された「トップレベル」アプリケーション オブジェクトの下で、その中に必要なグローバル変数を定義することもできます。これにより、アプリケーションに公開されるオブジェクトを通じて、アプリケーションおよび定義したクロージャ内で通常のグローバル変数が影響を受けるのを防ぐことができます。私は、JS のグローバル変数を気軽に定義するのはあまりにも恥ずかしいことだと常々思っていました。

クロージャの記述方法と VS の強力でインテリジェントなプロンプトを使用すると、非常に快適に感じるでしょう。以下に別のメソッドを添付します

(function () {
  var baseUrl = "www.cnblogs.com/tdws/";
 
  application.getBaseUrl = function () {
  return baseUrl;
  }
 }());
 console.log(application.getBaseUrl());//www.cnblogs.com/tdws/

JavaScript クロージャとアプリケーションの詳細な説明

最後に書きました

変数を保持して一連のgetメソッドを公開するのは非常に動的だと思いませんか╮(╯-╰)╭手を....

もちろん、クロージャも適切に使用する必要があり、メモリ リークが発生するため、循環参照を引き起こさないようにしてください。クロージャーは解除されないため、スペースを無駄にする不必要なクロージャーを作成しないでください。コードが複雑になるため、どこでもクロージャを使用しないでください。

以上がこの記事の内容です。この記事の内容が皆さんの勉強や仕事に少しでも役立つことを願っています。また、PHP中国語ウェブサイトもサポートしたいと思っています。

JavaScript のクロージャとアプリケーションに関する詳細な記事については、PHP 中国語 Web サイトに注目してください。


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