お帰りなさい。
このビデオでは、クロージャについて説明します。
閉鎖は、あなたの頭を包み込むためのより困難なコンセプトの1つです。
しかし、いったん定義が何であるかを本当に理解すれば、私はそれらのカップルを見たことがずっと簡単になるだろう。
では、このビデオで何をするつもりですか？
私たちは、クロージャが何であるか、それが何でないかを理解するつもりです。
クロージャを使用してプライベート変数をエミュレートします。
現実世界でのクロージャの使用例をいくつか挙げます。
クローズは何ですか？
クロージャは、以前に返された外部関数で定義された変数を使用する関数です。
だから私は今定義があまり意味がないかもしれないことを知っている。
ではすぐに例を見てみましょう。
コマンドオプションJayを押して、私のchrome開発ツールを開きます。
クロージャーは、関数で定義された変数をよく使う関数であるとすれば、外部関数を作りましょう。
ですから、この関数の外側にある関数amikを、文字列と同じdataという変数にします。
クロージャーは外側の機能の内側にあります。
私は内部関数と内部関数という新しい関数を返すか、内部データと呼ばれる変数を作り、内部データは文字列と等しくなります。
驚くばかり。
今この内部関数の中で、文字列クロージャが文字列で返されます。
驚くばかり。
さて、この外部関数を呼び出しましょう。
それは私たちに何を返すべきか？
それは内部関数の定義を返すことになるでしょう。
しかし、この内部関数の内部では、外部関数で定義された変数というデータを使用しています。
だから私はこの外部関数を呼び出すと、すぐに内部関数を呼び出して、文字列を返します。
閉鎖は素晴らしいです。
だから、今は閉鎖の力を実際に見ることはできないかもしれませんが、これは内部関数の内部にこのデータ変数のような外部関数で定義された変数を使う良い例です。
外部関数がすでにここで通知を返すと、外部関数が返されますが、外部関数が既に返されていてもこのデータ変数を使用することができます。
別の例を見てみましょう。
ここで私は、パラメータAを取り入れ、パラメータbをとるInnerという関数を返すOuterという関数があります。
内部関数は、外部関数で定義された変数Aを使用しており、外部関数が返されたときにその変数を使用しています。
ですから、この関数innerは他の例と同様にクロージャです。ここで注意すべきことがいくつかあります。
このためには内部関数を返さなければならず、外部関数を呼び出してすぐに内部関数を呼び出すか、内部関数の結果を変数に格納し、後で一般的に呼び出すことができます。
すばやく試してみましょう。
これらの関数のいずれかに1秒間クロージャーパズルビデオが含まれているかどうかを調べることができるかどうかを確認してください。
さて、この最初の機能で何を思いつきましたか？
内部関数は、返された外部関数で見つける変数を使用していないことがわかります。
だから、ここのこの1つは、2番目の例ではクロージャを含んでいません。
内部関数は、内部関数が呼び出されるまでに返された外部関数で定義されたdataという変数を使用していることがわかります。
だから最初のものはないが、2番目のものは常にクロージャの定義に戻る。
また、内部関数が外部関数で変数を使用していないことがわかっている場合は、おそらくクロージャではありません。
だからいつあなたはクロージャーを使用しますか？
クロージャの大きなユースケースは、他の言語でのプライベート変数の考え方を作成することです。
私たちが私用変数と呼ぶ外部では変更できない変数がサポートされていますが、javascriptにはそれが組み込まれていません。
ありがたいことに閉鎖が私たちを助けることができます。
そこで、プレスコマンドオプションJaganのchrome開発ツールのこの例を見て、それを開いて、counterと呼ばれる関数をこの関数の中に書くつもりです。
私はcountと呼ばれる変数を作るつもりですので、ゼロに等しく、このカウンタ関数の中で私は新しい関数を返すつもりです。
ここに私はこの機能に名前をつけていないという通知はありません。
これは、これらの関数が匿名であるためです。
だから私はこの関数の名前を付けたいと思っていますが、これは何かを数えるように呼び出すことができますが、私はそうする必要はありません。
そして、この内部関数の中で私はプラスプラスの数を返します。
プレフィックス演算子として私がplus
plusをやっている理由は、最初に私がそれを1になるようにするためです。
今私はこのカウンター関数をCと呼ばれる変数と等しくなるように設定することができ、私はR
Cがカウンターと等しいことを保存します。
今私はそれを見て、Cがどんなものになると思いますか？
まあ私は以前に見たように。
それは関数の定義になります。私がCをもう一度呼び出すと、1だけカウントが返されます。
それを何度も繰り返してみましょう。
しかし、これについて本当にうれしいのは、誰も私が現在行っている範囲で変数数にアクセスすることができないということです。
カウントにアクセスしようとすると、カウントが定義されていないと言って参照を取得しようとしています。
そしてcountは私的な変数なので誰も来なくてもカウントの値は常にゼロになるはずです。
ビデオを一時停止し、この例をクロムコンソールにコピーしてみてください。
クロージャがどのように機能するかを理解することで多くの助けになります。
このクラスルーム関数内のプライベート変数の別の例を見てみましょう。
インストラクターと呼ばれる変数は、LPと呼ばれる2つの文字列の配列です。
このクラスルーム関数は、2つの関数を持つオブジェクトを返します。
インストラクターとインストラクターを取得インストラクターを取得するインストラクターに混乱して表示することを可能にするのは、パラメーターを取り込んでインストラクターのアレイに追加する機能です。
それでここで閉鎖がどこに起こっているのですか？
GETインストラクターがインストラクターの機能を追加することに注意してください。
両方とも、ここでこの関数の外にあるこのインストラクターの変数とこの関数を使用します。
したがって、これらの2つの関数はインストラクタを取得し、インストラクタを追加すると、既に返された外部関数で定義された変数が使用されます。
あなたはインストラクターが私にEllen
coltの配列をプリントアウトさせることができるようになっています。インストラクターはそのアレイにインストラクターを加えて理論を返します。
しかし、私が別の変数を使って新しい教室を作ったとき、私はインストラクターを得て、イアンはここにいないことがわかります。
最後に、closureを使用して、講師にここでプライベート変数を変更させました。
誰もそれを変更することはできませんので、いつでも教室が作成され、インストラクターは常に路地と呼ばれることになります。
だから、ちょっとしたことで私たちと付き合っているように見えますが、ここでは小さな例がありますが、多くのツールや技術がクローズをかなり活用して学ぶでしょう。
だから、あなたがそのコードのいくつかを見ているときに、そのクロージャがどこにあるのかを知ることができるかどうか調べてみてください。
あなたにも同様に指摘してください。
では、私たちは何を学びますか？
内部関数がすでに返された外部関数で宣言された変数を使用し、クロージャが存在しない場合、クロージャが存在します。
内部関数を返さず、その内部関数が外部関数から返される変数を使用しない場合は、クロージャを使用してプライベート変数を作成し、ロジックとアプリケーションを分離するためのより良いコードを書くこともできます。
それは閉鎖のためのものです。
次のビデオで会いましょう