就職の面接を探しているとき、あなたは同じ良いと問題の種類を尋ねるインタビュアーはつまり、議論するの閉鎖この問題。
通常の状況下でお願いします:
クロージャとは何ですか?
クロージャ何の機能?
クロージャは、ページ上の任意の効果がありますか?
長所と短所の閉鎖は何ですか?
...............
だから、今、私たちは、プレートの閉鎖に来て!
クロージャとは何か:
クロージャーは、ネストされたスコープを使用することで、オリジナルのローカル変数は、環境無料のプライベート変数に進化します。
クローズド原則パッケージ:
コンピュータのトリガ、ネストされたスコープを使用して、ガベージコレクションのメカニズムを使用し続けることができ、変数が最初に保存され、一時的に削除され、。
ガベージコレクション:
データは一時的に、すぐに削除されていない、一時領域に保存されている必要が再び使用する場合は、あなたがクリア行くために、このようなこれ以上の使用として、引き続き使用する直接、このデータを見つけることができ、削除します。
アプリケーションパッケージの閉鎖:
1.非同期サイクル:
VARアリ= document.querySelectorAll( "李"); //第一种 (VAR i = 0; iはali.lengthを<; I ++の)のために{ (関数(指数){ アリ[インデックス] .onclick =関数(){ にconsole.log(インデックス); } })は、(i ) } //第二种 (VAR i = 0; iはali.lengthを<; I ++の)のために{ アリ[I] .onclick =(関数(指数){ return関数(){ にconsole.log(インデックス); } } )(私); } //第三种 (I = 0せ; iがali.lengthを<; I ++の)のために{ アリ[I] .onclick =関数(){ にconsole.log(I)。 } }
2.タイマーコールバック関数
setTieout(FN( "こんにちは")、5000); 関数fn(STR){ return関数(){ にconsole.log(STR)。 } }
3.関数内で外部変数を繰り返し
関数fn(){ VARのA = 10。 復帰機能(){ にconsole.log(++) } } のvar F = FN()。 F()。 F()。 F()。
特性閉鎖パッケージ:
クロージャは、内部および外部接続ブリッジの範囲であります
利点:
1.あなたは非常に便利な、アップ、削除するデータを保存し、使用し続けることができます
2.データは、関数の内部動作の外部にあってもよいです
短所:
1.データが削除されるので、削除されたが、それは存在し続けていない、それはメモリを占めることになる、パフォーマンスが良いです。
2.外部データが内部変更されることがあります。